Выполнение потока внутри doInBackground AsyncTask () - PullRequest
3 голосов
/ 30 сентября 2011

У меня есть несколько AsyncTask сетевых операций.Недавно меня попросили добавить после каждой из этих операций еще один сетевой вызов, который вызывает удаленный сервис, отправляющий некоторую статистику.Мне бы хотелось, чтобы этот статистический вызов не задерживал «основные» сетевые вызовы, и поэтому я думал о том, чтобы выполнить их в потоке, созданном и запущенном внутри AsyncTask * doInBackground().Этот поток, скорее всего, закончится после doInBackground() и, возможно, закончится AsyncTask.Я попробовал это, и это работает, но мне было интересно, есть ли побочные эффекты, такие как утечки памяти или аналогичные?

Спасибо;)

Ответы [ 2 ]

0 голосов
/ 18 ноября 2013

Если вы хотите запустить поток в методе doInBackground, вы можете запустить его в onProgressUpdate() метод

Пример:

protected class MyTask extends AsyncTask<Void,Integer,Void> {

        public static final int START_THREAD = -1;
        @Override
        protected void onProgressUpdate(Integer... values) {
            if(values[0] == START_THREAD){
                startThread();
            }
        }

    @Override
    protected Void doInBackground(Void... params) {
        publishProgress(START_THREAD);
        return null;
    }
}
0 голосов
/ 30 сентября 2011

Попробуйте запустить второй AsyncTask в первом методе AsyncTasks «onPostExecute». Для меня это работало без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...