The issue is more with leaking the Activity Context, which is potentially a ton of memory if they have a complex view hierarchy/lots of images.

You need the UI thread, but that can be pretty easily obtained other ways if necessary. You aren't leveraging the onPostExecute UI thread call in the AsyncTask anyway, so you could do this another way. The number of AsyncTasks that can be run simultaneously is limited (to between 1 and 5), so if you're not going to leverage it, it's probably in the end users best interest to avoid using the AsyncTask. It is also recommended that you only use them for very short operations - related to reasons below:

 I wasn't sure whether the update helper calls were showing dialogs or not, but it sounds like they are. To do the dialogs, you basically do need a reference to a live Activity. The issue is that if the download is running and the Activity stops, the download can keep going. Now if you try to use it to show a dialog, you're going to get a crash - something about it not being bound to an active window IIRC. This could happen if the user backgrounds the app and the system is under memory pressure, or if the app simply opens another activity and closes a first a la:

> Intent intent = new Intent(...);
> ...
> startActivity(intent);
> finish();

Which is a pretty common use case, especially for older, non-fragment based apps. Unless this download finishes before the user does anything, you will likely run into issues.