2

这是我的问题..我在doInBackground我的AsyncTask类中调用一个方法,该方法在我的主要活动类中声明。它在后台线程中工作吗?或者我需要在里面写整个方法doInBackground??

protected String doInBackground(String... params) {
    getAllUsersfromServer();            

    return null;
}

getAllUsersfromServer();是在主类中声明的。该方法使用REST从服务器下载一些数据..

我需要在后台线程中运行整个过程。它有效吗?

4

4 回答 4

2

它在后台线程中工作吗?

AFAIK,是的,它在后台线程中工作。

我需要在 doInBackground 中编写整个方法吗?

没必要那样做。

onPostExecute 下一刻就开始工作了.. 甚至我的用户信息仍在加载中

这是要点,它只是逐行工作,当它执行时getAllUsersfromServer();,控件会执行在另一个后台线程中执行的方法。[要理解在 doInBackground 中的方法调用下方添加一行日志打印行,并在方法的循环中添加一行,即使循环未完成,您也会看到 doInBG 日志将被打印]

发生这种情况是因为,您的方法getAllUsersfromServer();是 Void,并且 Android 将其作为其他一些独立的工作来完成,并且不会等到它完成并继续移动到下一行。

解决方案 :

只需添加一种返回类型,即boolean getAllUsersfromServer();在方法return true;和 doInBackground中添加 return 语句boolean flg = getAllUsersfromServer();

于 2013-04-05T05:54:33.817 回答
1

AsyncTask 方法 doInBackground 在单独的线程中异步工作,您的主线程仍可用于显示 UI。

但是我们通常做的是使用静态 HttpHelper 类或方法等来完成诸如“getAllUsersFromServer”之类的网络处理。

于 2013-04-05T05:21:53.040 回答
1

是的,它将在后台线程中工作。检查这个

于 2013-04-19T10:43:27.853 回答
0

我不知道你为什么要这样做,但无论如何:

如果活动在异步调用期间被破坏,您将遇到问题,例如方向更改。一个解决方案是使方法静态。

于 2013-04-05T05:20:08.363 回答