假设我想在一个异步任务中睡眠线程。
代码:
protected Weather doInBackground(Void... params) {
try {
Thread.sleep(10000);
} catch (Exception ex) {
}
}
这会导致应用程序中的其他异步任务暂停。为什么? 我的意图不是暂停线程,但网络调用需要一些时间,这会暂停应用程序中的所有异步任务。
如何解决这个问题?
这就是我调用异步任务的方式
WeatherAsync weatherAsync = new WeatherAsync(Pref.getString(getApplicationContext(), Pref.local.WEATHER_CITY), null, null,
new WeatherAsync.WeatherAsyncCallback() {
@Override
public void onCancelled() {
}
@Override
public void onPreExecute() {
}
@Override
public void onPostExecute(Weather result) {
if (result == null) {
return;
}
Log.d("Temp", "" + result.getTemp());
//adapter.addWeather(new NavigationDrawerItem(result, NavigationDrawerItem.WEATHER_VIEW));
}
});
weatherAsync.execute();
答案 0 :(得分:1)
AsyncTask
API文档说明如下:
首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。
也就是说,如果你正在运行一个相对现代的Android,那么你的AsyncTask
就会发生在同一个线程中。要继续API文档:
如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。
这只是在Android上执行多线程内容的一种方式。您也可以使用普通的旧线程来实现多线程。