2013-01-21 192 views
4

我需要從設備發送命令,progressdialog應該顯示進度,直到命令完成。爲此,我在我的應用程序中使用了asynctask。 但是完成命令需要很長時間。異步任務花費很長時間才能完成任務

那麼,有什麼辦法可以將asynctask的優先級設置爲最大值?

任何建議將不勝感激。 在此先感謝

回答

25

那麼你可以試試這個:

protected Void doInBackground() { 
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
/* do the work */ 
} 
+1

你能否感覺到這種不同? – Yeung

+1

@Yeung對我來說,它讓這個過程更加緩慢 –

+0

這對於在執行任務時已經運行一些其他任務的情況不起作用。在線程調度程序給你的任務一些時間來真正開始執行之前,你的'setPriority'將不起作用。 –

2

你也可以的情況下,定義自己的定製超時你不想讓用戶從Web服務過去一定時間等待答案。

0

目前,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只會重置優先級。 。