簡體   English   中英

兩個不同的AsyncTasks不從前台服務開始

[英]Two different AsyncTasks not getting started from a foregroundService

我已經編寫了一個前台服務,該服務在onCreate方法中可以做到這一點:

public void onCreate(){
     //........
     startForeground(id,notification);
     Task1=new Task(this);
     task1.execute();
     Task2=new Task(this);
     Log.d("T2","Created");
     task2.execute();
     Log.d("T2","Executed");
}

現在發生的是,上面的代碼使task1執行(每個循環后有一個while(true),睡眠60秒的時間),但是決不允許task2啟動其doInBackground()。

我不確定是怎么回事,根據logcat,它清楚地表明task2.execute()確實被調用了,但是為什么第二個任務的doInBackground()沒有啟動? 我最初計划有兩個前台服務,但是在閱讀了幾篇SO文章之后,決定僅在前台有一個服務,並讓它有兩個不同的Asynctasks在后台進行一些連續處理。 請幫助我完成這項工作!

從Honeycomb開始的AsyncTask的默認執行程序是AsyncTask.SERIAL_EXECUTOR ,這意味着在給定時間僅執行一個任務。

如果需要並行性,則只需使用AsyncTask.THREAD_POOL_EXECUTOR ,即

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

而不只是

task.execute(params);

請參閱AsyncTask文檔中 的“執行順序”部分。

這僅僅是因為從Android 3.0開始,AsyncTask在單個后台線程中工作:

從HONEYCOMB開始,任務在單個線程上執行,以避免並行執行引起的常見應用程序錯誤。

http://developer.android.com/reference/android/os/AsyncTask.html

因此Task2永遠不會運行,因為您是在Task1完成之前運行它的。

暫無
暫無

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

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