1
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");
        }
    }

和输出:

测试:调用1

为什么当服务在后台工作时其他方法永远不会被调用?如果服务停止,则所有方法调用和输出:

测试:调用1

测试:调用2

测试:调用3

4

1 回答 1

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();
}

基本上 AsyncTask 的变化出现在 Honeycomb 中(请参阅“执行顺序”部分中的 Android SDK 文档),因此在之前,您像往常一样启动它,对于 HC 及更高版本,executeOnExecutor()如果您不喜欢新行为,请使用(没有人喜欢,我思考)

于 2012-12-02T14:17:36.397 回答