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