2012-01-16 86 views

回答

8

一般来说,没有。如果活动正在进行配置更改并被销毁并重新创建,则后台线程将与错误的实例进行交谈,这可能会给您带来问题。

理想情况下,AsyncTaskdoInBackground()应该能够独立于其启动组件(活动,服务等)运行。我建议你在AsyncTask上创建一个构造函数,并传入任何需要的内容。或者,AsyncTask由动态片段管理,该片段使用setRetainInstance(),在这种情况下(AFAIK),访问片段的私有数据成员应该是安全的,因为片段不会在任何地方发生。

+0

非常好的一点,这让我想(可能会导致一些重构在我的项目中...) – Guillaume 2012-01-16 18:14:23

+0

@CommonsWare因此它可能会导致问题,但这些不是由于线程,特别是内存一致性错误。是对的吗? – 2012-01-16 18:24:22

+0

@ Julian:那么,内存一致性错误*是由于线程引起的。 – CommonsWare 2012-01-16 18:31:33

0

当内部类访问封闭类的私有成员(字段或函数)时,编译器会为这些成员生成访问函数。这将打破封装,有人认为这是一件好事或坏事。