访问或修改 AsyncTask 中的实例变量
假设我有一个名为 A 的内部类扩展了 asynctask,而外部类扩展了 Activity B。 A中的代码访问或修改Activity B中的实例变量是否是线程安全的?
Suppose I have a innerclass extends asynctask called A and the outerclass extends Activity B.
Is it thread-safe that the code in A access or modify the instance variable in Activity B?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,AsyncTask 在单独的线程中运行,因此您必须如果在 AsyncTask 运行时 Activity 和 AsyncTask 共享状态(在本例中为实例变量),则执行通常的线程同步。
一般来说,为了简单起见,您可以实现
onPublishProgress()
和onPostExecute()
将状态从 AsyncTask 发布到 Activity,因为这两个方法都发布到 UI 线程中运行。No, an AsyncTask runs in a separate thread so you'll have to do the usual thread synchronization if the Activity and AsyncTask share state (in this case instance variables) while the AsyncTask is running.
Generally, to make it easy, you implement
onPublishProgress()
andonPostExecute()
to publish state from the AsyncTask to the Activity, since both methods are posted to run in the UI thread.如果您直接访问实例而没有
synchronize
,那么不行,该代码不是线程安全。您必须使用
synchronize
来实现此目的,或者只需从AsyncTask
的onPublishProggress()
方法访问实例。If you access the instance directly without
synchronize
, then no, the code is not thread safe.You have to use
synchronize
for that or just simply access the instance fromonPublishProggress()
method ofAsyncTask
.