执行Thread.Sleep(10)会对应用程序的性能产生任何副作用吗?
准确地说,在DoinBackground()方法中执行Thread.Sleep(100)会影响进程中的其他Asyntasks吗?
如果是这样,我们可以在Asynctask中导致延迟,以便其他执行的任务不会受到影响吗?
谢谢&的问候,
manjusg
答案 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();
}