AsyncTask调用主类方法,它在后台完全工作吗?

时间:2013-04-05 05:15:08

标签: android android-asynctask

这是我的问题..我在我的doInBackground类的AsyncTask中调用方法,该方法在我的主活动类中声明。它在后台线程中有效吗?或者我需要在doInBackground ??

中编写整个方法
protected String doInBackground(String... params) {
    getAllUsersfromServer();            

    return null;
}

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

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

4 个答案:

答案 0 :(得分:2)

  

它在后台线程中有用吗?

AFAIK,是的,它适用于后台线程。

  

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

无需这样做。

  

onPostExecute下一刻工作..甚至我的用户信息都是   还在加载

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

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

解决方案:

只需添加一个返回类型,即boolean getAllUsersfromServer();,然后在方法return true;和doInBackground boolean flg = getAllUsersfromServer();

中添加return语句

答案 1 :(得分:1)

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

然而,我们通常做的是使用静态HttpHelper类或方法等进行网络处理,例如“getAllUsersFromServer”。

答案 2 :(得分:1)

是的,它可以在后台线程中使用。 check this

答案 3 :(得分:0)

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

如果在异步调用期间销毁活动,则会遇到问题,例如方向更改。解决方法是使方法保持静态。