java - 同步方法是否在与 UI 线程 (Android) 不同的线程上运行?

标签 java android android-asynctask synchronized

第一次在这里发帖提问。刚刚开始编程和编码我的第一个应用程序。

我有一个具有 fetchUpdates() 方法的应用程序类文件:

public synchronized void fetchUpdates() {
    String[] mURLs = getURLs();
    new DownloadJSONData().execute(mURLs[0], mURLs[1]);
}

DownloadJSONData 是一个 asyncTask,它从服务器获取更新,onPostExecute 方法使用来自服务器的 JSON 数组更新 sqlite 数据库。

应用程序的不同组件(小部件和 Activity )调用此方法从服务器获取更新以更新数据库。

问题:synchronized 方法是否在与 UI 线程不同的线程上运行?如果是这样,将 DownloadJSONData 中的代码移动到同步的 fetchUpdates() 方法应该没有问题,对吧?如果连接到服务器或从服务器下载数据时出现阻塞,它不应该阻塞 UI 线程,对吗?

动机:我试图更改 fetchUpdates() 方法以返回一个 boolean 值,指示数据库是否已更新。但是,现在(我认为) fetchUpdates() 方法在 asyncTaskonPostExecute 方法之前完成,因此 fetchUpdates() 方法无法指示对 DownloadJSONData() 的调用是否更新了数据库。如果数据库在调用后更新,我需要调用 fetchUpdates() 方法的应用组件的行为有所不同。

附注由于我是编程新手,简单而详细的解释会非常有帮助。

谢谢!

最佳答案

不,同步方法在同一线程中运行。但是,在执行另一个同步方法(同一对象的)时,没有其他线程可以执行该方法。

关于java - 同步方法是否在与 UI 线程 (Android) 不同的线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495946/

相关文章:

viewpager中的Android异步任务

java - 在 AsyncTask 中捕获未处理异常的设计模式

java - ListView 上的异步图像加载器 [Android]

android - 如何监听 WebView 完成加载 URL?

android - phonegap cordova 3.3 插件无法在 android 中获取注册表

android - 如何在 getView 方法之外获取 View 和持有者对象?

java - Spring Cloud Feign 拦截器

java - Java 中使用尽可能少的锁进行并发字节数组访问

java - 使用特定的类加载器从 `` byte[ ]`` 加载类

java - 使用自定义方法从返回输出中以 mm/dd/yyyy 格式显示日期