内部AsyncTask安全访问外部Activity类私有成员字段?

时间:2012-01-16 17:53:54

标签: java android thread-safety android-asynctask inner-classes

在AsyncTask.doInBackground()中,Android的AsyncTask是否可以安全地读取Activity的私有成员字段?提前谢谢。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

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