【发布时间】:2026-02-25 01:30:01
【问题描述】:
在屏幕上,我显示状态指示灯或要显示的打印机是否已连接。我很想知道以最佳性能实现它的最佳方法。
我尝试创建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();
}
所以,如果我理解正确,mPrinterUpdaterRunnable 的 run() 方法中的所有代码都将在主 UI 线程中执行。
有没有更好的方法来做到这一点,或者我已经使用了最好的方法来做到这一点?不执行主 UI 线程中的所有代码,仅执行 someView.setImageResource(someID)
【问题讨论】:
标签: java android multithreading performance android-handler