Skip to main content

Drawables resources management in android



I have one question. I made quick search on the site, but don't found answer. We develop application that running android 2.2 and higher. For views customization we use many drawables, that used in such way:







<LinearLayout ...

android:background="@drawable/some_drawable"/>







We use maps too and manipulate with many data in the memory, and our app got a heavy. On top devices, it work's great,but on other we got OutOfMemory exception after some minutes of using our application. It's look as we have memory leaks. I'm trying reduce the memory usage of our app. question, do we need manualy cleaning resources on destroing our activities: removes drawables for view, or system made it for us?


Comments

  1. I have encountered this issue in my app as well. OutOfMemoryError would be thrown if a lot of bitmaps were used in an activity, with scaling and/or other bitmap manipulation. What I have done is added the following code to my activity, which seems to make the problem appearing less often (it didn't solve it for good) and the app now runs with no errors on a reasonably low-end handset.

    @Override
    protected void onDestroy()
    {
    super.onDestroy();
    // explicitly release media player
    if(viewObjectInfo != null)
    viewObjectInfo.releaseMediaPlayer();
    //explicitly release all drawables and call GC
    unbindDrawables(findViewById(R.id.main));
    System.gc();
    }

    /**
    * Unbinds all drawables in a given view (and its child tree).
    *
    * @param findViewById Root view of the tree to unbind
    */
    private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
    view.getBackground().setCallback(null);
    }

    if (view instanceof ViewGroup) {
    for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
    unbindDrawables(((ViewGroup) view).getChildAt(i));
    }
    try
    {
    ((ViewGroup) view).removeAllViews();
    }
    catch(UnsupportedOperationException ignore)
    {
    //if can't remove all view (e.g. adapter view) - no problem
    }
    }
    }

    ReplyDelete
  2. If you are dealing with a lot of images, the best you can do is have a look at this video from Google: http://www.youtube.com/watch?v=_CruQY55HOk

    Bitmaps are a complex world in Android. Trut me and take your time to understand it.

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 3 Final Exam => latest version

1 . Which security protocol or measure would provide the greatest protection for a wireless LAN? WPA2 cloaking SSIDs shared WEP key MAC address filtering   2 . Refer to the exhibit. All trunk links are operational and all VLANs are allowed on all trunk links. An ARP request is sent by computer 5. Which device or devices will receive this message? only computer 4 computer 3 and RTR-A computer 4 and RTR-A computer 1, computer 2, computer 4, and RTR-A computer 1, computer 2, computer 3, computer 4, and RTR-A all of the computers and the router   3 . Refer to the exhibit. Hosts A and B, connected to hub HB1, attempt to transmit a frame at the same time but a collision occurs. Which hosts will receive the collision jamming signal? only hosts A and B only hosts A, B, and C only hosts A, B, C, and D only hosts A, B, C, and E   4 . Refer to the exhibit. Router RA receives a packet with a source address of 192.168.1.65 and a destination address of 192.168.1.161...