2015-06-04 2 views
0

У меня есть проект колледжа, где мне нужно использовать потоки для выполнения задач в паралели. Я начал использовать AsyncTask и простую задачу task.execute (params), но потом выяснил, что это не позволяет запускать несколько Asynctasks всего один раз. Тогда я обнаружил task.executeOnExecutor, который я использую, как этот (код внутри моего класса ElevatorControl):работает несколько AsyncTasks: task.executeOnExecutor не работает

taskDesligaLampada.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ""); 

я выполнить это в моем классе ElevatorControl (который не является деятельностью). Самое забавное: executeOnExecutor не запускает метод doInBackground задачи. Я попытался с помощью ведения журнала для debuggig как это (в моем AsyncTask):

@Override 
protected String doInBackground(String... string_qualquer) 
{ 
    //PAREI AKI PARECE QUE ESSA TASK NÃO EXECUTA. PROBLEMA DO EXECUTE ON EXECUTOR? 
    Log.i("ElevatorControl", "Elevador id=" + elevatorControl.getIdElevador() + ";fechando porta"); 
    this.interfaceDaPorta.fecharPorta(andarAtual, this.elevatorControl.getIdElevador()); 
    return ""; 
} 

, но журнал не появляется на LogCat, что означает, что он не работает. Пробовал ловить переменное состояние, возвращаемый после executteOnExecutor как этот (метод внутри моей задачи ElevatorControl):

//os eventos abaixo deveriam ser concorrentes. Por isso as tasks foram criadas 
    TaskFechaPorta taskFechaPorta = new TaskFechaPorta(this, interfaceDaPorta, sobeOuDesceOuParado, andarAtual); 
    Status statusThreadRoda = taskFechaPorta.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "").getStatus(); 

и, отладки, я узнал, что это состояние «работает». Почему он не запускает метод doInBackground моей задачи?

может ли кто-нибудь сказать мне, что я делаю неправильно?

P.S .: Я использую много асинхронных задач для моего проекта, по крайней мере 18, потому что мой учитель так сказал.

ответ

1

Прежде всего, у Android есть предел Threads и AsyncTask. «Все AsyncTasks управляются внутри общего (статического) ThreadPoolExecutor и LinkedBlockingQueue. Когда вы вызываете execute в AsyncTask, ThreadPoolExecutor выполнит его, когда он будет готов некоторое время в будущем».

В этом посте: Android AsyncTask threads limits?

Что версия вашего Android? Эта функция доступна только с Honeycomb.

С уважением.

Смежные вопросы