繁体   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