gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:17:37 28 4
gpt4 key购买 nike

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com