Worried about memory?  Try this:

<application android:largeHeap="true">


On Sunday, July 29, 2012 4:11:55 AM UTC-5, Dmitriy F wrote:
>
> I've written a simple test where I have:
> FragmentManager fm = getSupportFragmentManager();
> FragmentTransaction ft = fm.beginTransaction();
> ft.hide(_sv);
> ft.commit();
> When the fragment gets hidden - onPause doesn't get fired. However, system 
> fires a chain of callbacks up to onDestroyView when I use a replace method. 
> So, I guess, I should be performing memory-recycling operations in 
> onDestroyView method.
>
> I've also noticed that when I hide the ViewPager component with 
> setVisibility(GONE) its' fragments dont fire onPause callback. Is there any 
> workaround to tell all the  fragments inside the ViewPager to clean 
> themselves with onDestroyView ?
>
> I still think I should use fragments since in a Tablet version those pages 
> are implemented as tabs.
>
> Thanks again and I was wondering whether you could point out or give some 
> links on implementing the memory management process. I have a lousy 
> knoweledge about WeakReferences, recycle(), System.gc() features but I 
> guess they are somewhat mutually-excluding. Probably, I should stick to 
> Weak/Soft references approach, should I ? If so - could you share some 
> insights/give link on the whole process of instantiating bitmap down to the 
> recycling.
>
> On Sunday, July 29, 2012 12:28:08 AM UTC+3, Dianne Hackborn wrote:
>>
>> If you have a fragment that holds on to a lot of memory in its view 
>> hierarchy and are concerned about this, then use 
>> FragmentTransaction.remove() to make it no longer visible -- that will 
>> remove it from its parent view and destroy its view hierarchy, so it 
>> doesn't hold on to any references.  (If you are manually loading bitmaps in 
>> the fragment, in onDestroyView() you can clear the references there.)  Of 
>> course this means a bit more overhead when the user returns to the 
>> fragment, since its view hierarchy needs to be re-inflated and initialized 
>> again.  But it won't be any worse than the first time the user visited it, 
>> and you need that to be fast as well.
>>
>> It is true that FragmentTransaction.hide() does not remove and the 
>> destroy the fragment's view hierarchy, just doing View.setVisibility(). 
>>  But that is not all -- it takes care of managing the fragment lifecycle so 
>> that fragment will be paused and stopped (since it is no longer visible). 
>>  You can implement the lifecycle to free up resources if you need to.  This 
>> will also result in them being freed when the entire activity is stopped, 
>> which is probably what you want as well.
>>
>> You shouldn't be directly hiding the view associated with a fragment. 
>>  That is what FragmentTransaction.hide/show() is for.  There is no need to 
>> directly hide the view owned by it, and doing so means that you are letting 
>> the correct fragment semantics execute.  (And for what it's worth, if you 
>> have no reason to use fragments with ViewPager, there is nothing forcing 
>> you to -- you can write your own adapter that directly manages raw views 
>> and doesn't use fragments at all.)
>>
>> On Sat, Jul 28, 2012 at 1:45 PM, Dmitriy F <[email protected]>wrote:
>>
>>> Thanks for the answers! Would you mind to suggest on the part about 
>>> fragments, bitmaps and memory management ? I decided to implement the app 
>>> with 3 activities and about 8 fragments. The fragment number might slightly 
>>> increase yet I think it's not the fragments but their bitmaps that gonna 
>>> cause troubles with memory. 
>>>
>>> For displaying the fragments I have two containers: a ViewPager(rotates 
>>> 3-4 fragments) element and a FrameLayout(displays strictly one fragment) 
>>> element. Right now I'm simply hiding one type of container and showing 
>>> another - setVisibility or fragmentTransaction.hide (I haven't figured out 
>>> what is the difference between these two apart from the latest gives an 
>>> ability of adding to activity's backstack). Is their any better way of 
>>> switching between the containers ?
>>>
>>> Additionally, even if those fragments might not hold much memory by 
>>> themselves - should I wrap those objects with SoftReference ?
>>>
>>> Could you tell any precautions/advices for implementing an app with such 
>>> structure ? Thanks.
>>>
>>>
>>> On Saturday, July 28, 2012 9:36:27 PM UTC+3, Romain Guy (Google) wrote:
>>>
>>>> 1) Does ImageView.SetImageResource applied against the same id twice or 
>>>>> thrice consumes memory for the same bitmap or uses a separate range for 
>>>>> every imageview element ?
>>>>>
>>>>
>>>> I don't quite understand your question. When a Bitmap is loaded as a 
>>>> Drawable (which is what ImageView does), it gets cached by the system 
>>>> (using weak references.) This means that if do this:
>>>>
>>>> Drawable d1 = loadDrawable(R.drawable.**myImage);
>>>> Drawable d2 = loadDrawable(R.drawable.**myImage);
>>>>  
>>>> you will get 2 different instances of Drawable, but the underlying 
>>>> Bitmap will be loaded in memory only once.
>>>>
>>>> 2) same as 1. but for BitmapFactory.decodeResource
>>>>>
>>>>
>>>> Every time you call this method you will load a new instance of a 
>>>> Bitmap object, which means you will use more memory.
>>>>  
>>>>
>>>>> 3) What part of Bitmap object consumes the most memory. If it's 
>>>>> "backbone memory object" than what is it ? Where can I elucidate the 
>>>>> structure of bitmap memory for myself ?
>>>>>
>>>>
>>>> A Bitmap is backed by a byte array containing all the pixels. This is 
>>>> what consumes the most memory. As of Android 3.0, this byte array can be 
>>>> found in Bitmap.java, in previous versions of the platform the pixel 
>>>> storage exists on the native side (you'd have to investigate 
>>>> SkBitmap.cpp.) 
>>>>
>>>> -- 
>>>> Romain Guy
>>>> Android framework engineer
>>>> [email protected]
>>>>
>>>>   -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>>
>>
>>
>>
>> -- 
>> Dianne Hackborn
>> Android framework engineer
>> [email protected]
>>
>> Note: please don't send private questions to me, as I don't have time to 
>> provide private support, and so won't reply to such e-mails.  All such 
>> questions should be posted on public forums, where I and others can see and 
>> answer them.
>>
>>  

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to