第一次在这里发布一个问题。刚开始编写和编写我的第一个应用程序。同步方法是否在UI线程(Android)的不同线程上运行?
我有了该方法fetchUpdates()的应用程序的类文件:
public synchronized void fetchUpdates() {
String[] mURLs = getURLs();
new DownloadJSONData().execute(mURLs[0], mURLs[1]);
}
DownloadJSONData是asyncTask
从服务器获取更新和onPostExecute
方法使用JSON数组从服务器更新SQLite数据库。
应用程序的不同组件(小部件和活动)调用此方法以从服务器获取更新以更新数据库。
问题:synchronized方法是否在UI线程的单独线程上运行?如果是这样,将DownloadJSONData
中的代码移动到同步的fetchUpdates()
方法中应该没有问题吧?如果在连接服务器或从服务器下载数据时有阻碍,它不应该阻止UI线程正确吗?
动机:我试图改变fetchUpdates()
方法返回一个指示数据库是否更新的布尔值。然而,因为它现在(我认为)fetchUpdates()
方法在asyncTask
的onPostExecute
方法之前完成,因此,fetchUpdates()
方法不能指示是否更新数据库的DownloadJSONData()
的调用。如果数据库在调用后更新,我需要调用fetchUpdates()
方法的应用程序组件的行为不同。
P.S.由于我是编程新手,简单而详细的解释将非常有用。
谢谢!
我有一个问题给你。你为什么不在'AsyncTask'的'doInBackground()'方法中更新数据库?因为'onPostExecute()'在UI线程上运行,并且可能会导致Hickup。 – tolgap 2013-03-19 09:46:51
这是一个很好的观点。我会带来改变。当我编写代码时没有考虑到这一点。感谢您指出了这一点! – fahmy 2013-03-19 09:50:09