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");
}
}
和输出:
test:called1
为什么当服务在后台工作时,其他方法永远不会被调用?如果服务停止,则所有方法调用和输出:
test:called1
test:called2
test:called3
最佳答案
我猜您是在 android 3.x 或更高版本上进行测试,并且您只是受到对 AsyncTask 执行方式所做更改的影响。
这就是我在我的代码中处理这个问题以始终完全并行地工作的方式:
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
new Test().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
new Test().execute();
}
AsyncTask 的基本变化出现在 Honeycomb 中(参见 Android SDK 文档 here 在“执行顺序”部分),所以在此之前,您照常启动它,对于 HC 及更高版本,使用 executeOnExecutor()
如果你不喜欢新的行为(我想没有人喜欢)
关于java - 当服务在后台工作时,AsyncTask 的 doInBackground 从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670080/