Вопрос обработчика Android

#android #notifications #handler

#Android #уведомления #обработчик

Вопрос:

У меня есть приложение, которому необходимо обновить уведомление ongoing_event. В уведомлении отображается индикатор выполнения, который мне нужно увеличивать каждые 5 минут. Я использую обработчики, но что-то в этом меня беспокоит, или я просто не понимаю, как они работают.

       if (progress<=24)
           {

    contentView.setProgressBar(R.id.status_progress,24,progress,false);
    Toast.makeText(getApplicationContext(),progress, Toast.LENGTH_SHORT).show();
    progress  ;
    mnNotificationManager.notify(IS_PARKED_ID, notification);
    mHandler.postDelayed(mUpdateTimeTaskProgressbar, 300000);

           }
  

вот код. Похоже, что когда экран устройства выключен, уведомление не обновляется. Я использовал обработчики в прошлом, но, насколько я помню, они обновлялись каждые 100 милисекунд. Итак, мой вопрос в том, обработчик каким-то образом приостановлен, остановлен и перезапущен или это что-то другое. И есть ли у вас какое-нибудь предложение, например, wake_lock.
Заранее спасибо, Саймон
РЕДАКТИРОВАТЬ: Забыл упомянуть, что все это выполняется из службы

Ответ №1:

Время от времени запускается gc, чтобы освободить память на вашем устройстве. При запуске из потока пользовательского интерфейса программа обновления вашего уведомления также может быть собрана.

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

Связь между моими действиями и сервисом я решил с помощью обработчиков, но для этого тоже есть множество методов.

Комментарии:

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

2. Если 5 минут — это расписание с фиксированной скоростью, то вы можете использовать таймер, а внутри метода запуска tas вы можете собрать необходимые данные для обновления. После этого вы можете вызвать свой обработчик, чтобы обновить панель прогресса.

3. Это исправлено, поэтому, я думаю, я буду использовать таймер. Спасибо за помощь

Ответ №2:

По умолчанию обработчик выполняется в том же процессе потока пользовательского интерфейса, поэтому я думаю, вам лучше использовать сервис для обновления индикатора выполнения. В этом случае вы хотите обновлять пользовательский интерфейс каждые 5 минут. Для достижения этой цели вы можете использовать AlarmManager для запуска службы оповещения.

Комментарии:

1. Он запускается из службы, но не кажется ли вам, что использование AlarmManager переусердствует, потому что тогда мне приходится иметь дело с трансляциями.