Igo*_*nko 1 java android android-service android-asynctask
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");
}
}
Run Code Online (Sandbox Code Playgroud)
并输出:
测试:called1
为什么其他方法永远不会在Service在后台工作时调用?如果服务停止,那么所有方法调用和输出:
测试:called1
测试:called2
测试: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();
}
Run Code Online (Sandbox Code Playgroud)
在的AsyncTask根本上改变出现在蜂窝(见Android的SDK文档此节中的"执行命令"),所以在这之前,你启动它像往常一样,为HC及以上,使用executeOnExecutor(),如果你不喜欢新的行为(没有人做,我认为)