第一次在这里发帖提问。刚刚开始编程和编码我的第一个应用程序。
我有一个具有 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()
方法在 asyncTask
的 onPostExecute
方法之前完成,因此 fetchUpdates()
方法无法指示对 DownloadJSONData()
的调用是否更新了数据库。如果数据库在调用后更新,我需要调用 fetchUpdates()
方法的应用组件的行为有所不同。
附注由于我是编程新手,简单而详细的解释会非常有帮助。
谢谢!
最佳答案
不,同步方法在同一线程中运行。但是,在执行另一个同步方法(同一对象的)时,没有其他线程可以执行该方法。
关于java - 同步方法是否在与 UI 线程 (Android) 不同的线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495946/