Как поставить задачи в рабочий поток в Android? - PullRequest
2 голосов
/ 30 октября 2010

Я пытаюсь найти простой способ поставить задачи в очередь в потоке, который НЕ является потоком пользовательского интерфейса.

У меня есть BroadcastReceiver, который отвечает на Intents каждый раз, когда снимается изображение, и уведомляет мою Службу каждый раз, когда это происходит. Службе придется выполнить некоторую обработку (масштабирование и поворот изображения), и я хотел бы сделать это в новом потоке (служба работает в том же потоке, что и моя основная активность). Так что я искал AsyncTask для этого.

Моя проблема заключается в том, что если следующее изображение будет получено ДО того, как предыдущее будет полностью обработано, у меня будут одновременно запущены две AsyncTasks, и я этого не хочу. Я хотел бы поставить в очередь обработку следующего, пока первый не будет сделан.

Так что в основном я хочу две темы. Один из них - стандартный UI-поток, а другой - мой рабочий поток, в котором у меня может быть очередь задач для выполнения.

Какой будет лучший подход?

1 Ответ

4 голосов
/ 30 октября 2010

У меня есть BroadcastReceiver, который отвечает на Intents каждый раз, когда снимается изображение, и уведомляет мою Службу каждый раз, когда это происходит. Службе придется выполнить некоторую обработку (масштабирование и поворот изображения), и я хотел бы сделать это в новом потоке (служба работает в том же потоке, что и моя основная активность). Так что я искал AsyncTask для этого.

IntentService - прекрасное решение для такого рода проблем, поскольку оно объединяет рабочую очередь с фоновым потоком в Service. Вы просто переопределяете onHandleIntent(), чтобы выполнить реальную работу.

Моя проблема в том, что, если следующее изображение будет получено ДО того, как предыдущее будет полностью обработано, у меня будут одновременно запущены две AsyncTasks, и я этого не хочу. Я хотел бы поставить в очередь обработку следующего, пока первый не будет сделан.

IntentService будет обрабатывать только один Intent за один раз.

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