java - 当服务在后台工作时,AsyncTask 的 doInBackground 从未被调用

标签 java android android-asynctask android-service

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/

相关文章:

android - 从 Activity 完成 2 个 AsyncTask 后如何启动新 Activity ?

java - 如何实现单个函数以在 AsyncTask 之后返回数据,或者如果之前已缓存则同步返回数据?

android - 满足条件时自动启动asynctask

Java 泛型 - 将函数映射到列表

Java 断言未得到充分利用

android - NativeBase 中卡体中的表单不可见

android - Google Maps API v2 灰屏

java - 无法解决循环中的 "Stale element reference exception"

java - 如何在运行时将组件封装到另一个容器中?

android - RecyclerView ItemTouchHelper 轻扫