这是我的问题..我在我的doInBackground
类的AsyncTask
中调用方法,该方法在我的主活动类中声明。它在后台线程中有效吗?或者我需要在doInBackground
??
protected String doInBackground(String... params) {
getAllUsersfromServer();
return null;
}
这个getAllUsersfromServer();
在主类中声明。该方法使用REST从服务器下载一些数据。
我需要在后台线程中运行整个过程。它有效吗?
答案 0 :(得分:2)
它在后台线程中有用吗?
AFAIK,是的,它适用于后台线程。
我需要在doInBackground中编写整个方法吗?
无需这样做。
onPostExecute下一刻工作..甚至我的用户信息都是 还在加载
这是重点,它只是逐行工作,当它执行getAllUsersfromServer();
时,控件将执行在另一个后台线程中执行的方法。 [要理解在doInBackground中方法调用下方添加一个日志打印行,在方法循环中添加一个日志打印行,即使循环未完成,也会看到doInBG日志将被打印]
发生这种情况是因为,你的方法getAllUsersfromServer();
是Void,并且Android将其作为其他一些独立工作来完成,并且不会等到它完成并继续移动到下一行。
解决方案:
只需添加一个返回类型,即boolean getAllUsersfromServer();
,然后在方法return true;
和doInBackground boolean flg = getAllUsersfromServer();
答案 1 :(得分:1)
AsyncTask方法doInBackground在一个单独的线程中异步工作,您的主线程仍可用于显示UI。
然而,我们通常做的是使用静态HttpHelper类或方法等进行网络处理,例如“getAllUsersFromServer”。
答案 2 :(得分:1)
是的,它可以在后台线程中使用。 check this
答案 3 :(得分:0)
我不知道你为什么要那样做,但无论如何:
如果在异步调用期间销毁活动,则会遇到问题,例如方向更改。解决方法是使方法保持静态。