2012-08-06 2 views
4

В случае, если Activity был разрушен, но AsyncTask все еще имеет ссылку на объект, есть ли способ прямого запроса к указанной (уничтоженной) активности, чтобы определить, действительно ли Activity действителен?Могу ли я определить, действительна ли ссылка на действие?

ответ

3

В onDestroy() способе активность, установить флаг, указывающий, что активность была разрушена.

Кроме того, в AsyncTask добавьте WeakReference к Activity вместо обычной ссылки.

В onPostExecute() способе AsyncTask, активность все еще жив, если WeakReference все еще имеет значение, а сама Activity все еще имеет флаг установлен в ложь.

+3

Я не вижу никаких гарантий в Android API, что слабая ссылка на Activity будет гарантировать сохранение, когда действие будет действительным, и что слабая ссылка будет сведена к нулю при уничтожении Activity. У вас есть конкретная причина полагать иначе? –

+2

Если действие освобождено, слабое указание скоро будет отменено. такая вещь должна произойти только после уничтожения активности, поскольку это последний шаг жизненного цикла деятельности. конечно, если есть еще ссылки на активность, флаг, о котором я писал, будет использоваться, поскольку слабая ссылка все равно укажет на эту активность. вы можете прочитать о weakReference здесь: http://developer.android.com/reference/java/lang/ref/WeakReference.html и о жизненном цикле активности здесь: http://developer.android.com/reference/android/app/ Activity.html –

+5

«скоро будет нулевым» .. недостаточно. это не дает достаточно подробных сведений о состоянии деятельности – Vlad

0

Попробуйте держать WeakReference в вашей деятельности.

WeakReference<Activity> ref = new WeakReference<Activity>(activity); 
… … … 
Activity activity = ref.get(); 
if (activity != null) { 
    // DO SOMETHING 
} 
+2

В API Android я не вижу никаких гарантий, что слабая ссылка на действие будет гарантировать сохранение, когда действие будет действительным, и что слабая ссылка будет сведена к нулю при уничтожении Activity. У вас есть конкретная причина полагать иначе? –

+1

Чтобы избежать дублирования, см. [Полный ответ] (http://stackoverflow.com/a/11834991/716075) * разработчиком Android *. – StenaviN

Смежные вопросы