private class Test extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.d("test", "called1");
}
@Override
protected Void doInBackground(Void... params) {
Log.d("test", "called2");
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.d("test", "called3");
}
}
并输出:
试验:called1
为什么其他方法永远不会在Service在后台运行时调用?如果服务停止,那么所有方法调用和输出:
试验:called1
试验:called2
试验:called3
答案 0 :(得分:8)
我猜你正在测试android 3.x或更新版本,你只是受到AsyncTask执行方式改变的影响。
这就是我在代码中处理这个问题的方法,以便始终完全并行地运行:
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
new Test().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
new Test().execute();
}
AscombTask的基本更改出现在Honeycomb中(请参阅“执行顺序”部分中的Android SDK文档here),因此在此之前,您可以照常启动它,对于HC和up,请使用executeOnExecutor()
如果你不喜欢新的行为(没想到,我认为)