在屏幕上,我显示状态指示器或要显示的打印机已连接。而且我想知道以最佳性能实现它的最佳方法。
我尝试创建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()
的{{1}}方法中的所有代码,则会在主UI线程中执行。
是否有更好的方法来执行此操作,或者我已经使用最佳方法来执行此操作?不只在实例mPrinterUpdaterRunnable
答案 0 :(得分:0)
您可以至少使用以下三个选项在后台线程中运行代码:
还有其他方法可以做到这一点。如果您打算大量扩展项目,那么从长远来看,RxJava具有更大的潜力。而且,它的学习曲线要陡得多。
第二种解决方案非常适合中小型项目,最容易与协程一起使用。
添加AppExecutors类(第二种解决方案)后,您将像这样使用它:
new AppExecutor().diskIO().execute(new Runnable() {
@Override
public void run() {
// Do your stuff
}
});
让我知道我是否可以帮忙!