Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更新后台应用程序的UI而不将其置于前台?_Android_User Interface_Alarmmanager_Onresume_Background Foreground - Fatal编程技术网

Android 如何更新后台应用程序的UI而不将其置于前台?

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线程更新视图,但这是可

我有一个Android应用程序,带有AlarmManager,每15分钟重复一次。根据这一结果,我想更新UI,但如果应用程序还没有焦点,我不想让Android将其置于前台

我该怎么做?或者,如何使UI更新在onResume中运行


我在服务和类的主要活动上调用类似于
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吗?