Android 如何更新后台应用程序的UI而不将其置于前台?
我有一个Android应用程序,带有AlarmManager,每15分钟重复一次。根据这一结果,我想更新UI,但如果应用程序还没有焦点,我不想让Android将其置于前台 我该怎么做?或者,如何使UI更新在onResume中运行Android 如何更新后台应用程序的UI而不将其置于前台?,android,user-interface,alarmmanager,onresume,background-foreground,Android,User Interface,Alarmmanager,Onresume,Background Foreground,我有一个Android应用程序,带有AlarmManager,每15分钟重复一次。根据这一结果,我想更新UI,但如果应用程序还没有焦点,我不想让Android将其置于前台 我该怎么做?或者,如何使UI更新在onResume中运行 我在服务和类的主要活动上调用类似于public static void updateRunningStatusTextView(Boolean inStatus)的方法,我很确定您的第一个选项不会发生。有postInvalidate()可以从非UI线程更新视图,但这是可
我在服务和类的主要活动上调用类似于
public static void updateRunningStatusTextView(Boolean inStatus)
的方法,我很确定您的第一个选项不会发生。有postInvalidate()
可以从非UI
线程更新视图
,但这是可用的
@Override
protected void onRestart() {
super.onRestart();
new Handler().postDelayed(new Runnable() {
public void run() {
// update UI here from cached values
}
}, 100);
}
…仅当此视图附着到窗口时
根据
或者,如何使UI更新在onResume中运行
这取决于许多事情,例如
视图
、数据以及代码中的内容,但您可以在静态类中设置数据,或将其保存在类似共享引用
的内容中,然后从中检索数据,例如字符串
用于文本视图
的setText()
,你没有。如果它在后台,你不需要更新UI
然后,您只需在恢复应用程序(onResume)时使用您拥有的最新数据更新UI。我已经在SharedReferences中保存了相关变量,因此我想在onResume中添加updateUI()方法是一种好方法。如果应用程序有焦点,我想立即更新,我该如何实现?我想这取决于你正在做什么,但有一个选项是在需要刷新的
视图上调用invalidate()
,我的意思是“检查应用程序是否在前台”-过程..?看,它应该会给你你所需要的。我选择了布尔isVisible方法,到目前为止似乎工作得很好。感谢您的帮助onResume不是一个更好的处理此问题的地方吗,因为它在onRestart之后会被调用,并且还会捕获其他几个案例?我真的需要使用处理程序和Runnable吗?