是否有可能由於某種原因,android操作系統可能會延遲或暫停我的asynctask。如果是這樣,我可以做些什麼來確保我的任務(例如從數據庫獲取數據)不會延遲或暫停。可能在UI線程上運行它,但我已經讀過它並不是一個好主意,因爲它可能會凍結UI並導致延遲。android可以延遲或暫停我的異步任務嗎?
回答
是否有可能在Android操作系統可能會延遲或暫停我的AsyncTask出於某種原因。
它可能被另一個AsyncTask
實例阻塞。默認情況下,他們在一個單一的後臺線程運行:https://developer.android.com/reference/android/os/AsyncTask.html
如果是的話我能做些什麼,以確保我的任務(如讀取數據庫數據)不被延遲或暫停。
調查究竟導致延遲。它是doInBackground
方法中的內容還是延遲發生在後臺操作之前或之後。它可以是任何東西,很難說,沒有調試代碼。
在UI線程上運行它可能但我已經讀過它不是一個好主意,因爲它可以凍結UI並導致滯後。
儘管在這種情況下AsyncTask
不是一個好的解決方案,但如果您正確實施它,它應該可以正常工作。其他要考慮的方法是Loader
s或AsyncQueryHandler
與ContentProvider
。取決於你的用例。
U不完全正確,AsyncTask使用threadPoolExecutor來運行操作,而簡單的LinkedBlockingQueue來存儲任務,絕對最小值爲2個線程,最大爲處理器數量的兩倍(2 * C + 1),線程以「AsyncTask#」命名,並且在AsyncTask完成後不會終止,而是等待下一個任務。 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTask.java#L208 – Inverce
感謝您的信息。根據你的鏈接,有一行:private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; 。 'AsyncTask' *可以使用threadPoolExecutor,但默認行爲是串行的。 –
@Inverce'從HONEYCOMB開始,任務在單個線程上執行,以避免由於並行執行導致的常見應用程序錯誤。'Link [here](https://developer.android.com/reference/android/os/AsyncTask.html )。 – Enzokie
@Override protected void onPreExecute(){ holdWait = false; stop = false; }
@Override
protected Void doInBackground(Void... params) {
synchronized (this) {
while(true) {
if(Work) return null;
if(HaveWork) {
//make some
} else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
public void mynotify() {
synchronized (this) {
if(holdWait) {
notify();
holdWait = false;
}
}
}
public void setStopWork() {
synchronized (this) {
stop= false;
if(holdWait) {
notify();
holdWait = false;
}
}
}
}
我想你不明白我的問題。我沒有對asynctask進行任何參考,並且再次運行它,並且開始了。當我的應用程序啓動時,我只運行asyctask從數據庫獲取數據。 –
@DayemSiddiqui @DayemSiddiqui我已更新代碼請檢查 – user1782565
@DayemSiddiqui可能會幫助你 – user1782565
- 1. 延遲或短暫暫停Windows消息
- 2. 春任務異步和延遲
- 3. 異步延遲超時任務
- 4. 異步任務暫停循環恢復
- 5. 我可以延遲window.open()嗎?
- 6. SQL Server 2008:我可以暫時暫停異步觸發器的執行嗎?
- 7. 設置延遲或暫停初始化
- 8. jQuery:暫停或延遲功能
- 9. Android中的暫停和還原異步任務
- 10. 如何在Android上暫停/延遲?
- 11. 對於任務暫停和恢復我可以使用ManualResetEventSlim嗎?
- 12. 我可以同步停止服務嗎?
- 13. Rails推遲/異步任務
- 14. 異步記錄器。我可以丟失/延遲日誌條目嗎?
- 15. 我可以延遲jQuery addClass嗎?
- 16. Android:正確地停止異步任務
- 17. Android異步任務取消/停止
- 18. swift中的異步延遲
- 19. Android異步進度對話框延遲
- 20. android異步任務
- 21. jQuery的延遲/暫停動畫
- 22. 我可以暫停iScroll功能嗎?
- 23. 我可以暫停回調嗎?
- 24. Android:我可以降低onTouch的延遲嗎?
- 25. android異步任務很慢嗎?
- 26. 異步任務異常Android
- 27. 異步延遲加載
- 28. 延遲異步回調
- 29. GWT-異步呼叫延遲
- 30. 如何在列表視圖中使用延遲加載或異步任務
它在什麼情況下延遲或暫停您的任務? – Victory
我正在從數據庫獲取數據並填充列表視圖。我使用異步任務獲取數據,並在異步任務完成後將其存儲在數組列表中。我在onPostExecute()函數中調用notifyDataSetChanged()以更新列表視圖適配器。大多數時候列表加載正常,但有時會出現延遲(我看到空白屏幕),並在一段時間後listview被更新。 –
你怎麼確定它不只是花更長的時間從數據庫獲取然後預期?磁盤io可能會很慢。 – Victory