[英]Thread.Sleep() in Asyntask Android
做Thread.Sleep(10)會對應用程序的性能產生任何副作用嗎?
准確地說,在DoinBackground()方法中執行Thread.Sleep(100)會影響進程中的其他Asyntasks嗎?
如果是這樣,我們可以在Asynctask內部導致延遲,以便其他執行的任務不受影響?
感謝和問候,
manjusg
是的,它會影響您的應用程序的性能。 AsyncTask以串行方式執行,因此這將延遲其他AsyncTask的啟動。 但是,如果您的應用程序必須在AsyncTask中睡眠而不影響其他AsyncTask,您可以並行執行它們。 但這也有一個缺點。 這將消耗比默認內存更多的內存,因此如果您要執行更多任務,則最終可能會在OOM中。 以下是如何並行運行任務的方法
yourAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
希望它會有所幫助;)
這取決於你的android:targetSdkVersion =“”。
http://developer.android.com/reference/android/os/AsyncTask.html
首次引入時,AsyncTasks在單個后台線程上串行執行。 從DONUT開始,這被改為一個線程池,允許多個任務並行運行。 從HONEYCOMB開始,任務在單個線程上執行,以避免由並行執行引起的常見應用程序錯誤。
如果您真的想要並行執行,可以使用THREAD_POOL_EXECUTOR調用executeOnExecutor(java.util.concurrent.Executor,Object [])。
最安全的方法是如上所述與Executor並行執行它們,但這需要最小的SDK為11.另一種解決方案是檢查當前的SDK並僅在可用時使用executor:
if (Build.VERSION.SDK_INT >= 11) {
// use executor to achieve parallel execution
asy.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
// this way they will execute parallel by default
asy.execute();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.