当Service在后台工作时,AsyncTask中的doInBackground从不调用

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

Mar*_*ski 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();
}
Run Code Online (Sandbox Code Playgroud)

在的AsyncTask根本上改变出现在蜂窝(见Android的SDK文档节中的"执行命令"),所以在这之前,你启动它像往常一样,为HC及以上,使用executeOnExecutor(),如果你不喜欢新的行为(没有人做,我认为)