New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

convert AsyncTasks to IntentService #472

Open
wants to merge 3 commits into
base: master
from

Conversation

Projects
None yet
2 participants
@yulin2

yulin2 commented May 8, 2015

Hi OpenTripPlanner-for-Android developers, I'm doing research on Android async programming, particularly on AsyncTask and IntentService. AsyncTask can lead to memory leak and losing task result when GUI is recreated during task running (such as orientation change). This article describes the problems very well.

We discussed with some Android experts and they agree with this issue, and claim that AsyncTask can be considered only for short tasks (less than 1 second). However, using IntentService (or AsyncTaskLoader) can avoid such problems since their lifecycles are independent from Activity/Fragment.

In OpenTripPlanner-for-Android, most of the AsyncTasks hold weak reference to an activity. It doesn't result in memory leak but may lead to wasting task result (when weak reference is GCed and points to null). Why not use IntentService instead, so that the BroadcastReceiver can hold a strong reference to activity while also avoid memory leak?

I refactored 3 AsyncTasks in OpenTripPlanner-for-Android to IntentService (in 3 commits), with the help of a refactoring tool we developed. Do you think using IntentService should be better in some of these 3 scenario? Do you want to merge (some) commits in this pr? Thanks.

@barbeau

This comment has been minimized.

Show comment
Hide comment
@barbeau

barbeau May 14, 2015

Member

@yulin2 Thanks for this, I'll hopefully be able to review in the next few weeks.

I'm spending more time on another project these days - would you be able to run your refactoring tool on the develop branch of the below repo and open a PR there?

https://github.com/OneBusAway/onebusaway-android/tree/develop

I'd likely be able to review that sooner, and it may fit in with some other changes I plan to make there.

Member

barbeau commented May 14, 2015

@yulin2 Thanks for this, I'll hopefully be able to review in the next few weeks.

I'm spending more time on another project these days - would you be able to run your refactoring tool on the develop branch of the below repo and open a PR there?

https://github.com/OneBusAway/onebusaway-android/tree/develop

I'd likely be able to review that sooner, and it may fit in with some other changes I plan to make there.

@yulin2

This comment has been minimized.

Show comment
Hide comment
@yulin2

yulin2 May 22, 2015

Thanks for the reply! I tried to convert the AsyncTask ObaRegionsTask in OneBusAway to IntentService in pr #267.

yulin2 commented May 22, 2015

Thanks for the reply! I tried to convert the AsyncTask ObaRegionsTask in OneBusAway to IntentService in pr #267.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment