簡體   English   中英

當Service在后台工作時,從未調用AsyncTask的doInBackground

[英]doInBackground from AsyncTask never called when Service work on background

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

為什么在Service在后台運行時永遠不會調用其他方法? 如果服務停止,則所有方法調用並輸出:

測試:稱為1

測試:被叫2

測試:被叫3

我猜您正在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根本上改變出現在蜂窩(見Android的SDK文檔節中的“執行命令”),所以在這之前,你啟動它像往常一樣,為HC及以上,使用executeOnExecutor()如果你不喜歡新的行為(沒有人我認為)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM