Java 安全连接到Android的UI线程

Java 安全连接到Android的UI线程,java,android,thread-safety,Java,Android,Thread Safety,使用从AsyncTask的doInBackground()方法在主UI线程中声明的对象的实例是否安全?我不太理解“在主UI线程中声明”的含义,线程不声明任何内容。我想你的意思是在活动中声明的。然后是的,只需确保没有并发问题(例如,一个线程正在读取,而另一个线程正在同一个实例上写入)synchronized和volatile是您的朋友。这不安全,因为创建异步任务的活动/片段在完成执行时不在那里,可能是因为屏幕旋转。您应该将所需的对象作为参数传递。要更新UI,应该使用postExecute方法 如果

使用从AsyncTask的doInBackground()方法在主UI线程中声明的对象的实例是否安全?

我不太理解“在主UI线程中声明”的含义,线程不声明任何内容。我想你的意思是在
活动中声明的。然后是的,只需确保没有并发问题(例如,一个线程正在读取,而另一个线程正在同一个实例上写入)
synchronized
volatile
是您的朋友。

这不安全,因为创建异步任务的活动/片段在完成执行时不在那里,可能是因为屏幕旋转。您应该将所需的对象作为参数传递。要更新UI,应该使用postExecute方法


如果您只是指线程安全,那么在android 3.x+中,如果您只使用AsyncTak,那么它应该是线程安全的,因为AsyncTasks是在串行执行器上执行的。在Android2.3上,这些命令是并行执行的

编辑


如果需要从异步任务的doInBackground方法修改UI,可以使用活动方法runOnUiThread

您的问题更多的是关于Java线程和线程之间的对象访问


请看一看这个例子,以便更好地理解这个主题

我找不到关于同步的官方java文档,你能给我一个链接或一个示例如何创建同步方法吗?
synchronized
volatile
都是java。你所说的使用是什么意思?如果活动已经停止,然后,如果您传递的实例在活动上下文中,那么它们也没有什么意义。“异步任务在串行执行器上执行”->,但UIThread是并发的。无论如何,你可以强制异步任务在3+上并发。是的,我只读安全的,而不是线程安全的。如果活动不存在,则如果任务仍在执行,则应用程序将崩溃。但是,您无法从AsyncTask访问UI,只能从PostExecute访问UI,后者在UI线程上执行,该线程为单线程。如果您的AsyncTask位于活动的内部类中,请在doInbackground:YourActivityClass中使用RunnuiThread。this.RunnuiThread(…)