對於在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. 從一個內部類訪問外部公有成員
- 8. Java - 私有成員vs私有內部類的默認成員
- 9. C++內部類不能訪問外部類的成員
- 10. 從外部類訪問內部類私有變量
- 11. 無法使用外部類對象訪問內部類成員
- 12. 從內部類訪問外部類成員
- 13. 關於訪問外部類的私人成員
- 14. 外部訪問內部私人類字段的Java最佳實踐
- 15. 從內部類訪問私有變量(AsyncTask)
- 16. c中內部類的訪問成員#
- 17. 試圖使用指針訪問類外部的私有變量,具有類外部的成員函數
- 18. 匿名類和外部私有字段
- 19. 外部類內部類 - 實例化內部類作爲外部類的成員
- 20. 訪問類私有成員內的結構成員?
- 21. 如何訪問外部類成員的子類內部類繼承
- 22. 訪問外部類的內部類
- 23. 內部類方法和私有字段
- 24. 訪問與CIN私人會員內部
- 25. 外部類的訪問字段
- 26. 內部類和獲得外部成員
- 27. 內部類的實例無法訪問外部類的數據成員
- 28. C++外部類訪問內部類的私有 - 爲什麼禁止
- 29. C++如何訪問私有成員在類的std :: for_each的內部
- 30. 如何從內部類構造函數訪問外部類的靜態成員?
太通用的問題,是私人會員字段最後? – Scorpion 2012-01-16 18:04:35