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 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...