我需要從設備發送命令,progressdialog
應該顯示進度,直到命令完成。爲此,我在我的應用程序中使用了asynctask
。 但是完成命令需要很長時間。異步任務花費很長時間才能完成任務
那麼,有什麼辦法可以將asynctask的優先級設置爲最大值?
任何建議將不勝感激。 在此先感謝
我需要從設備發送命令,progressdialog
應該顯示進度,直到命令完成。爲此,我在我的應用程序中使用了asynctask
。 但是完成命令需要很長時間。異步任務花費很長時間才能完成任務
那麼,有什麼辦法可以將asynctask的優先級設置爲最大值?
任何建議將不勝感激。 在此先感謝
那麼你可以試試這個:
protected Void doInBackground() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
/* do the work */
}
你也可以的情況下,定義自己的定製超時你不想讓用戶從Web服務過去一定時間等待答案。
目前,Android使用後臺線程cgroup的優先THREAD_PRIORITY_BACKGROUND
或更糟的所有線程和THREAD_PRIORITY_BACKGROUND
是10而THREAD_PRIORITY_DEFAULT
是0和THREAD_PRIORITY_FOREGROUND
是-2。
如果你使用THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE
(又名9),你的線程將被取消10%限制的背景cgroup,但不夠重要,不足以中斷用戶界面線程。
protected final YourResult doInBackground(YourInputs... yis) {
Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
...
}
但請注意,底層實現可能會爲不同的任務,下一個AsyncTask或其他任務重用相同的Thread對象。雖然,doInBackground()返回後,似乎Android只會重置優先級。 。
你能否感覺到這種不同? – Yeung
@Yeung對我來說,它讓這個過程更加緩慢 –
這對於在執行任務時已經運行一些其他任務的情況不起作用。在線程調度程序給你的任務一些時間來真正開始執行之前,你的'setPriority'將不起作用。 –