对于在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