Asynctask Android中的Thread.Sleep()

时间:2013-12-07 16:19:30

标签: java android multithreading android-asynctask

执行Thread.Sleep(10)会对应用程序的性能产生任何副作用吗?

准确地说,在DoinBackground()方法中执行Thread.Sleep(100)会影响进程中的其他Asyntasks吗?

如果是这样,我们可以在Asynctask中导致延迟,以便其他执行的任务不会受到影响吗?

谢谢&的问候,

manjusg

2 个答案:

答案 0 :(得分:1)

是的,它会影响您的应用程序的性能。 AsyncTask以串行方式执行,因此这将延迟其他AsyncTask的启动。但是,如果您的应用程序必须在AsyncTask中睡眠而不影响其他AsyncTask,您可以并行执行它们。但这也有一个缺点。这将消耗比默认内存更多的内存,因此如果您要执行更多任务,则最终可能会在OOM中。以下是如何并行运行任务的方法

yourAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

希望它会有所帮助;)

答案 1 :(得分:1)

这取决于你的android:targetSdkVersion =“”。

http://developer.android.com/reference/android/os/AsyncTask.html

  

首次引入时,AsyncTasks在单个上串行执行   背景线程。从DONUT开始,这被改成了一个池   允许多个任务并行运行的线程。从...开始   HONEYCOMB,任务在单个线程上执行以避免常见   并行执行导致的应用程序错误。

     

如果您真的想要并行执行,可以调用   executeOnExecutor(java.util.concurrent.Executor,Object [])with   THREAD_POOL_EXECUTOR。

最安全的方法是如上所述与Executor并行执行它们,但这需要最小的SDK为11.另一种解决方案是检查当前的SDK并仅在可用时使用执行程序:

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();
}