如果Activity
已被銷燬,但AsyncTask
仍然有對該對象的引用,是否有任何方法可以直接查詢引用(銷燬)的活動以確定Activity
是否仍然有效?我可以確定對活動的引用是否有效?
4
A
回答
3
在Activity的onDestroy()
方法中,設置一個標誌來指示Activity已被銷燬。
此外,在AsyncTask
中,將WeakReference
添加到Activity
而不是正常參考。
在AsyncTask
的onPostExecute()
方法,活動仍然活着如果WeakReference
仍具有值,並且Activity
本身仍具有該標誌設置爲假。
0
嘗試保持WeakReference
爲您的活動。
WeakReference<Activity> ref = new WeakReference<Activity>(activity);
… … …
Activity activity = ref.get();
if (activity != null) {
// DO SOMETHING
}
+2
我在Android API中看不到任何保證,當活動有效時,對活動的弱引用將保證持續存在,並且在活動被銷燬時保證弱引用被無效。你有特定的理由相信嗎? – 2012-08-06 19:47:32
+1
爲了避免重複,請參閱*完整答案(http://stackoverflow.com/a/11834991/716075)* android developer *。 – StenaviN 2012-08-07 04:27:05
相關問題
- 1. Android:是否可以引用第二個活動中的活動?
- 2. 我的活動設置是否正確和有效?
- 3. 是否可以確定一個對象是否被另一個對象引用?
- 4. 確定是否可以啓動應用程序中的特定活動
- 5. 是否可以確定動畫順序
- 6. 是否有等效的ApplicationController,但是對於活動作業?
- 7. ListBox.SelectedIndexChanged - 您可以確定它是否是用戶啓動的?
- 8. 檢查活動是否有效
- 9. 我的MySQL索引是否有效?
- 10. 我的活動加載之前是否可以顯示動畫?
- 11. 以編程方式確定Web域是否可用的最有效方法?
- 12. 有人可以檢查我的sql是否有效[postgresql]
- 13. 確定該表單是否有效
- 14. 我可以決定是否使用dataweave查找返回的有效負載?
- 15. 我如何知道對象是否可以被弱引用?
- 16. 我可以找出對象是否被引用嗎?
- 17. 是否可以有多個啓動器活動?
- 18. 有沒有辦法確定Firebase用戶的UID是否有效?
- 19. 是否可以確定哪個進程啓動我的.Net應用程序?
- 20. 使用tomcat我可以檢查我的HTTP請求是否是對我的Web服務有效的請求?
- 21. 確定當前用戶是否正在登錄到Active Directory(或者是有效的活動目錄用戶)
- 22. 如何確定我的Android Google帳戶憑據是否有效?
- 23. 確定WindowServer是否可用?
- 24. 我如何確定我的項目是否使用自動引用計數
- 25. MySql,我不確定我的索引是否正確,或者如果我可以提高查詢的速度?
- 26. 是否可以製作一個沒有任何活動的apk?
- 27. 是否可以顯示所有活動的jQuery bind()?
- 28. 是否有可能開展START_STICKY活動?
- 29. 是否可以確定pthread_t結構是否未使用?
- 30. 數據庫索引是否可以跨表?我對Postgres的
我在Android API中看不到任何保證,當活動有效時,對活動的弱引用將保證被保留,並且在活動被銷燬時保證弱引用被無效。你有特定的理由相信嗎? – 2012-08-06 19:59:25
如果活動被釋放,弱引用很快就會被清空。這種事情只有在活動被破壞之後纔會發生,因爲這是活動生命週期的最後一步。當然,如果仍然有對該活動的引用,我已經寫過的關於這個活動的標誌將被使用,因爲弱引用仍然會指向這個活動。你可以在這裏閱讀weakReference:http://developer.android.com/reference/java/lang/ref/WeakReference.html和活動生命週期在這裏:http://developer.android.com/reference/android/app/ Activity.html – 2012-08-06 21:53:03
「很快就會被忽略」..不夠好。這並不足以說明活動的狀態 – Vlad 2013-03-04 19:25:58