Android Handler
ассоциируется с тем потоком, в котором он создан (при условии, что поток уже имеет петлитель).По умолчанию в Android обратные вызовы выполняются в потоке с именем «main», который также называется потоком пользовательского интерфейса.Независимо от того, из какого потока вызывается метод post
из метода handleMessage
, он будет вызываться из потока, в котором был создан обработчик (обычно это «основной» поток).Поскольку метод handleMessage
всегда вызывается в одном и том же потоке, за один раз будет обрабатываться только одно сообщение.
Если в вашем плане должен быть только один потребитель, то Handler является хорошим выбором.Вам не нужно будет удалять сообщения от вашего потребителя (обработчика), вместо этого они просто поступят в handleMessage
для обработки.Если вы хотите выполнить обработку в «основном» потоке, тогда вы просто создаете новый обработчик, если вы хотите выполнять обработку в фоновом режиме, чтобы избежать ANR, вы, вероятно, захотите использовать HandlerThread .Вот пример обработчика, работающего в своем собственном фоновом потоке:
HandlerThread handlerThread = new HandlerThread("Consumer");
handlerThread.start();
Handler consumer = new Handler(handlerThread.getLooper()) {
public void handleMessage (Message msg) {
}
};
Обратите внимание, что в приведенном выше описании класс вообще не используется, потому что классы представляют собой структуру кода, не связанную с тем, какой потоккод выполняется на