對於在AsyncTask.doInBackground()中是Activity的內部類來讀取Activity的私有成員字段的Android AsyncTask是否安全?提前致謝。安全的內部AsyncTask訪問外部Activity類私有成員字段?
回答
一般來說,沒有。如果活動正在進行配置更改並被銷燬並重新創建,則後臺線程將與錯誤的實例進行交談,這可能會給您帶來問題。
理想情況下,AsyncTask
的doInBackground()
應該能夠獨立於其啓動組件(活動,服務等)運行。我建議你在AsyncTask
上創建一個構造函數,並傳入任何需要的內容。或者,AsyncTask
由動態片段管理,該片段使用setRetainInstance()
,在這種情況下(AFAIK),訪問片段的私有數據成員應該是安全的,因爲片段不會在任何地方發生。
非常好的一點,這讓我想(可能會導致一些重構在我的項目中...) – Guillaume 2012-01-16 18:14:23
@CommonsWare因此它可能會導致問題,但這些不是由於線程,特別是內存一致性錯誤。是對的嗎? – 2012-01-16 18:24:22
@ Julian:那麼,內存一致性錯誤*是由於線程引起的。 – CommonsWare 2012-01-16 18:31:33
當內部類訪問封閉類的私有成員(字段或函數)時,編譯器會爲這些成員生成訪問函數。這將打破封裝,有人認爲這是一件好事或壞事。
- 1. 在內部類中訪問外部類的私有成員:JRuby
- 2. 內部類訪問外部類成員
- 3. 訪問內部類的私有字段
- 4. 在內部類安全實踐中訪問外部類變量/成員?
- 5. 從外部訪問內部成員
- 6. 訪問類內部的私有成員指針的假設
- 7. Java - 私有成員vs私有內部類的默認成員
- 8. 無法使用外部類對象訪問內部類成員
- 9. 外部訪問內部私人類字段的Java最佳實踐
- 10. 從內部類訪問私有變量(AsyncTask)
- 11. 試圖使用指針訪問類外部的私有變量,具有類外部的成員函數
- 12. 匿名類和外部私有字段
- 13. 外部類內部類 - 實例化內部類作爲外部類的成員
- 14. 訪問類私有成員內的結構成員?
- 15. 如何訪問外部類成員的子類內部類繼承
- 16. 訪問外部類的內部類
- 17. 內部類和獲得外部成員
- 18. 內部類的實例無法訪問外部類的數據成員
- 19. C++外部類訪問內部類的私有 - 爲什麼禁止
- 20. 從外部調用內部AsyncTask片段
- 21. C++如何訪問私有成員在類的std :: for_each的內部
- 22. 如何從內部類構造函數訪問外部類的靜態成員?
- 23. Qt C++內部類訪問外部類
- 24. 使用反射訪問私人內部類字段
- 25. 訪問私有類中的成員
- 26. 使用類成員函數訪問類內的私有結構
- 27. 訪問內部字段[WebClient]
- 28. 從其他類訪問私有成員
- 29. 訪問私有成員C++
- 30. 訪問私有成員
太通用的問題,是私人會員字段最後? – Scorpion 2012-01-16 18:04:35