I considered IntentService before; however, I did not found a way to abort 
IntentService like the AsyncTask#cancel() mechanism.
It is why I adapt to Asynctask and wonder about the memory leak issue.
If I try to null out the member variables and the activity reference in 
AsyncTask in onPause(), is it safe? Or, I do not have to null out them 
unless they are static.
I know that onPause() is guaranteed to be called before the Activity 
becomes killable.

G. Blake Meike於 2013年1月14日星期一UTC+8下午11時37分16秒寫道:

> After spending considerable time looking at this issue, I strongly suggest 
> that you look into an Intent Service, for any long running task.  Using 
> AsyncTasks is just fraught.
>
> First of all, onDestroy is only called best effort.  If you care about 
> getting it done, you can't do it in onDestroy.  Further, as kris points 
> out, onDestroy is, often, called just as your *process* is about to be 
> destroyed.  Worrying about allocation of memory in your process, just as it 
> is destroyed, is pretty pointless.
>
> There are two issues you need to consider: making your program correct 
> according to Java ("If mutable state is referenced from more than one 
> thread, all references must take place holding a single lock" - B. Goetz, 
> paraphrased).  You also have to be sure that the lifecycles of unmanaged 
> objects (e.g. AsyncTasks) don't interfere with the lifecycles of managed 
> objects (Activities).
>
> Nulling out pointers and AsyncTasks that survive screen 
> reorientation (despite the fact that I proposed it myself, at one 
> point) are just Voodoo.
>
> G. Blake Meike
> Marakana
>
> Programming Android 2ed is now in stores:
> http://bit.ly/programmingandroid
>
>
> On Monday, January 14, 2013 1:10:52 AM UTC-8, Greenhand wrote:
>>
>> Thank you. 
>> Another related question, in section "5. Implement a more intelligent 
>> AsyncTask dealing with screen orientation" of 
>> http://blog.doityourselfandroid.com/2010/11/14/handling-progress-dialogs-and-screen-orientation-changes/,
>>  
>> it has private AsyncTaskComplex activity in ListFresher as a member 
>> variable. Shouldn't it be null out because it is not a static Activity 
>> references?
>>  
>>
>> Kristopher Micinski於 2013年1月14日星期一UTC+8下午4時24分53秒寫道:
>>
>>> Basically, as long as you aren't hanging static Activity references 
>>> you should be fine.  The main activity will be thrown away upon its 
>>> destruction, at which point the Activity will be thrown away: along 
>>> with its contents.  Of course, if you're holding onto Views elsewhere 
>>> that's bad (i.e., don't hold static refs). 
>>>
>>> kris 
>>>
>>> On Mon, Jan 14, 2013 at 1:42 AM, Greenhand <[email protected]> 
>>> wrote: 
>>> > I read 
>>> > 
>>> http://android-developers.blogspot.tw/2009/01/avoiding-memory-leaks.html 
>>> > about avoiding memory leaks. 
>>> > I would like to know whether I should null out all member variables, 
>>> such as 
>>> > TextView and Button in onDestroy()? Or, unregistering listener, 
>>> unbinding 
>>> > service and etc.in onDestroy() are enough to prevent memory leak? 
>>> > 
>>> > -- 
>>>
>>>

-- 
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