1

Как использовать Looper с asyncTask?Как использовать Looper с asyncTask?

Метод doImBackground вызывается для программного создания TableLayout под названием MyResultTable. В свою очередь MyResultTable имеет обработчик, который вызывается onTouch во время MotionEvent.ACTION_MOVE.

После получения жалоб на использование дескриптора внутри asynchTask, я решил запустить обработчик на UIThread. Но это приводит к тому, что мой метод onTouch имеет медленный ответ. Итак, мой вопрос: как использовать петлитель с asyncTask?

код UIThread:

activity.runOnUiThread(new Runnable() { 
    public void run() { 
handler.post(mResizeViews); 
    } 
}); 

Моя Looper попытка: (не работает: пустой экран)

protected MyResultTable doInBackground(Void... params) { 
      Looper.prepare(); 
      MyResultTable table = new MyResultTable(context, other); 
      Looper.loop(); 
      return tabl; 
     } 

ответ

3

Как бы использовать Looper с AsyncTask?

Вы бы этого не сделали.

Метод doImBackground вызывается для программного создания TableLayout под названием MyResultTable.

Это не подходящая роль для doInBackground(). Используйте doInBackground() для медленных операций: сетевой ввод-вывод, дисковый ввод-вывод и т. Д. Используйте команду onPostExecute() для создания пользовательского интерфейса («TableLayout под названием MyResultTable») на основе данных, полученных doInBackground().

MyResultTable, в свою очередь, имеет обработчик, который вызывается onTouch во время MotionEvent.ACTION_MOVE.

Это не имеет смысла. Вы используете Handler для пересылки событий в основной поток приложений из фонового потока. Ваш onTouchEvent() вызывается в основном потоке приложения, и поэтому ему не нужен Handler.

+0

Уверены ли вы? Я знаю, что у вас обычно есть отличные ответы. Но я всегда собираю свои таблицы в фоновом режиме, а затем использую 'onPostExecute', чтобы передать пользовательскую таблицу в linearLayout, удерживая ее. В противном случае андроид, как правило, говорит, что мой интерфейс работает слишком много. –

+0

@CoteMounyo: «В противном случае андроид, как правило, говорит, что мой интерфейс работает слишком много» - используйте такие инструменты, как Traceview, чтобы найти реальную причину проблем с производительностью. – CommonsWare

+0

Хорошо. Поэтому я пробую ваши предложения. И он работает (+1). Никакой жалобы от android о UI не работает. Но мой слайдер все еще не гладкий. Чтобы начать движение, требуется некоторое время, а затем перейдите туда, где пользователь перемещает палец. Ссылка http://stackoverflow.com/questions/17958671/increase-sensitivity-to-user-touch –