На экране у меня отображается индикатор состояния или принтер для отображения подключен или нет. И мне интересно узнать, как лучше всего реализовать это с наилучшей производительностью.
Я пытался создать Handler
объект и вызвать postDelayed(Runnable r, long delayMillis)
, и он работает как положено:
Инициация Handler
и Runnable
private static final int SOME_INTERVAL = 10000;
private Handler mHandler = new Handler();
private Runnable mPrinterUpdaterRunnable = new Runnable() {
@Override
public void run() {
updatePrinterIndicator(); \\ do some stuff
mHandler.postDelayed(this, SOME_INTERVAL);
}
};
private void updatePrinterIndicator() {
// check printer status and update some view for instance ImageView
}
После этого мне нужно запустить Handler
при запуске действия и удалить все обратные вызовы, когда пользователь покидает действие, поэтому я пишу:
@Override
public void onResume() {
super.onResume();
mHandler.postDelayed(mPrinterUpdaterRunnable , 0);
}
@Override
public void onPause() {
mHandler.removeCallbacksAndMessages(null);
super.onPause();
}
Таким образом, если я правильно понимаю, весь код в методе run()
из mPrinterUpdaterRunnable
будет выполнен в основном потоке пользовательского интерфейса.
Есть ли лучший способ сделать это, или я уже использую лучший способ сделать это? Не выполнять весь код в основном потоке пользовательского интерфейса, а только, например, someView.setImageResource(someID)