![](/img/trans.png)
[英]Getting objects from Room database, and check for max wind at place for foregroundservice
[英]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.