2013-12-07 6 views
0

Делает ли Thread.Sleep (10) какие-либо побочные эффекты для производительности приложений?Thread.Sleep() в Asyntask Android

Чтобы быть точным, будет выполняться Thread.Sleep (100) внутри метода DoinBackground() повлияет на другие Asyntasks в процессе?

Если это так, мы можем вызвать задержку внутри Asynctask, чтобы не повлияло на выполнение других задач.

Благодаря & С уважением,

manjusg

+1

http://stackoverflow.com/questions/12159403/executing-multiple-asynctasks- аналогично выполняйте параллельные задачи async. Затем они будут спать независимо друг от друга. Если вы запускаете их в последовательном порядке (это поведение по умолчанию сейчас), вы можете отложить все остальные задачи во всем своем приложении. – zapl

+0

Чтобы понять 'sleep()', вы должны понимать потоки. 'sleep' не следует использовать, чтобы вызвать задержку. Существует много методов потоковой обработки, которые заставляют код приостанавливаться и выполняться позже, например 'postDelayed()'. 'sleep()' используется для получения ресурсов обработки для ЦП, так что он не будет время срезать (или многозадачно) ваш поток, когда вам не нужно его выполнять. Например, вы ожидаете, что тупик будет разрешен. – Simon

ответ

1

ДА это будет влиять на производительность приложения. AsyncTask выполняется последовательно, поэтому это задержит запуск другой AsyncTask. Но если вам необходимо, чтобы ваше приложение спало в AsyncTask, не затрагивая другие AsyncTask, вы можете выполнять их параллельно. Но это также имеет недостаток. Это будет потреблять больше памяти, чем по умолчанию, поэтому, если у вас есть больше задач для выполнения, вы можете оказаться в OOM. Ниже, как вы можете запустить задачу параллельно

yourAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 

надеюсь, что это поможет;)

1

Это зависит от вашего андроида: targetSdkVersion = «».

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

Когда впервые, AsyncTasks были выполнены поочередно на одном фоновом потоке. Начиная с DONUT, это было изменено на пул из потоков, что позволяет нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать общих ошибок приложений , вызванных параллельным выполнением.

Если вы действительно хотите параллельного выполнения, вы можете вызвать executeOnExecutor (java.util.concurrent.Executor, Object []) с THREAD_POOL_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(); 
} 
Смежные вопросы