簡體   English   中英

Asyntask Android中的Thread.Sleep()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM