Problem refreshing ImageView

All your problems with Audio, Video and Images.

Problem refreshing ImageView

Postby Urizen » Fri Mar 12, 2010 11:31 am

I have an aplication that shows in a ImageView a infinite sequence of photograms received in a tcp socket. I have no problems during around 2 minutes, but aproximately in that moment, the aplication fails with an "OutOfMemoryError: bitmap size exceeds VM budget..."

Code is the next:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. public class SocketView extends Activity {
  3.  
  4.        
  5.  
  6.         private ImageView iv;
  7.  
  8.         private Button button;
  9.  
  10.         private Bitmap bitmap;
  11.  
  12.        
  13.  
  14.         private Handler handler;
  15.  
  16.        
  17.  
  18.         private Socket socket;
  19.  
  20.         private ObjectInputStream in;
  21.  
  22.        
  23.  
  24.         /** Called when the activity is first created. */
  25.  
  26.     @Override
  27.  
  28.     public void onCreate(Bundle savedInstanceState) {
  29.  
  30.         super.onCreate(savedInstanceState);
  31.  
  32.         setContentView(R.layout.main);
  33.  
  34.        
  35.  
  36.         iv = (ImageView)findViewById(R.id.image_view);
  37.  
  38.         button = (Button)findViewById(R.id.button);
  39.  
  40.        
  41.  
  42.         handler = new Handler(){
  43.  
  44.                 public void handleMessage(Message msg) {
  45.  
  46.                         try{
  47.  
  48.                                 Bundle b = msg.getData();
  49.  
  50.                                 if(bitmap != null){
  51.  
  52.                                         bitmap.recycle();
  53.  
  54.                                 }
  55.  
  56.                                 Thread.sleep(100);
  57.  
  58.                                 bitmap = BitmapFactory.decodeByteArray(
  59.  
  60.                                                 b.getByteArray("photogram"), 0,
  61.  
  62.                                                 b.getByteArray("photogram").length);
  63.  
  64.                                 iv.setImageBitmap(bitmap);
  65.  
  66.                         } catch (Exception ex) {
  67.  
  68.                                 Log.e("E", ex.toString());
  69.  
  70.                                 for(StackTraceElement s:ex.getStackTrace()){
  71.  
  72.                                         Log.e("E", s.toString());
  73.  
  74.                                 }
  75.  
  76.                         }
  77.  
  78.                 };
  79.  
  80.         };
  81.  
  82.        
  83.  
  84.         new Thread(){
  85.  
  86.                 public void run(){
  87.  
  88.                         try{
  89.  
  90.                                 socket = new Socket();
  91.  
  92.                                 socket.connect(new InetSocketAddress("X.X.X.X", N));
  93.  
  94.                                 InputStream is = socket.getInputStream();
  95.  
  96.                                 in = new ObjectInputStream(is);
  97.  
  98.                                 while(true){
  99.  
  100.                                         Message m = handler.obtainMessage();
  101.  
  102.                                         Bundle b = new Bundle();
  103.  
  104.                                         b.putByteArray("photogram", (byte[])in.readObject());
  105.  
  106.                                         m.setData(b);
  107.  
  108.                                         handler.sendMessage(m);
  109.  
  110.                                         ObjectOutputStream out = new ObjectOutputStream(
  111.  
  112.                                     socket.getOutputStream());
  113.  
  114.                             out.writeObject("ACK");
  115.  
  116.                             out.flush();
  117.  
  118.                             Thread.sleep(300);
  119.  
  120.                             System.gc();
  121.  
  122.                                 }
  123.  
  124.                         } catch (Exception ex) {
  125.  
  126.                                 Log.e("E", ex.toString());
  127.  
  128.                                 for(StackTraceElement s:ex.getStackTrace()){
  129.  
  130.                                         Log.e("E", s.toString());
  131.  
  132.                                 }
  133.  
  134.                         }
  135.  
  136.                 }
  137.  
  138.         }.start();
  139.  
  140.     }
  141.  
  142. }
  143.  
  144.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4


As you can see i invoke the garbage collector and do a recycle in the bitmap. The aplication goes well during 1-2 minutes. What can be happening?
Urizen
Once Poster
Once Poster
 
Posts: 1
Joined: Fri Mar 12, 2010 11:01 am

Top

Return to Multimedia Problems

Who is online

Users browsing this forum: No registered users and 11 guests