为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测Android应用程序何时到达后台并返回到前台

如何检测Android应用程序何时到达后台并返回到前台

慕标琳琳 2019-06-19 15:31:01
如何检测Android应用程序何时到达后台并返回到前台我正在尝试编写一个应用程序,当它在经过一段时间后返回到前台时,它会做一些特定的事情。是否有一种方法可以检测应用程序何时被发送到后台或被带到前台?
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

这个onPause()onResume()当应用程序被带到后台并再次进入前台时,将调用方法。但是,当应用程序第一次启动时,以及在其被杀死之前,它们也会被调用。你可以读到更多活动.

在后台或前台没有直接获取应用程序状态的方法,但即使是我也面临过这个问题,并找到了解决方案onWindowFocusChangedonStop.

欲知更多详情,请到此查询。Android:用于检测Android应用程序何时进入后台并返回到前台的解决方案,而不需要getRunningTask或getRunningAppProcess.


查看完整回答
反对 回复 2019-06-19
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我就是这样解决这个问题的。它的工作前提是,在活动转换之间使用时间引用最有可能提供充分的证据,证明应用程序已经“背景”或没有。

首先,我使用了一个android.app.Application实例(让我们称它为MyApplication),它有一个计时器、一个TimerTask、一个常量来表示从一个活动到另一个活动的转换所需要的最大毫秒数(我使用的值是2s),以及一个布尔值来表示应用程序是否“在后台”:

public class MyApplication extends Application {

    private Timer mActivityTransitionTimer;
    private TimerTask mActivityTransitionTimerTask;
    public boolean wasInBackground;
    private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000;
    ...

应用程序还提供了启动和停止计时器/任务的两种方法:

public void startActivityTransitionTimer() {
    this.mActivityTransitionTimer = new Timer();
    this.mActivityTransitionTimerTask = new TimerTask() {
        public void run() {
            MyApplication.this.wasInBackground = true;
        }
    };

    this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask,
                                           MAX_ACTIVITY_TRANSITION_TIME_MS);}public void stopActivityTransitionTimer() {
    if (this.mActivityTransitionTimerTask != null) {
        this.mActivityTransitionTimerTask.cancel();
    }

    if (this.mActivityTransitionTimer != null) {
        this.mActivityTransitionTimer.cancel();
    }

    this.wasInBackground = false;}

该解决方案的最后一部分是从所有活动的onResume()和onPace()事件中添加对这些方法的每个调用,或者最好在所有具体活动继承的基本活动中添加一个调用:

@Overridepublic void onResume(){
    super.onResume();

    MyApplication myApp = (MyApplication)this.getApplication();
    if (myApp.wasInBackground)
    {
        //Do specific came-here-from-background code
    }

    myApp.stopActivityTransitionTimer();}@Overridepublic void onPause(){
    super.onPause();
    ((MyApplication)this.getApplication()).startActivityTransitionTimer();}

因此,在用户只是在应用程序的活动之间导航的情况下,离开活动的onPace()启动计时器,但是几乎立即被输入的新活动在达到最大转换时间之前取消了计时器。所以黄蜂地会是假的.

另一方面,当活动从发射器、设备唤醒、电话结束等到达前台时,很可能是在此事件之前执行的计时器任务,因此黄蜂地被设置为千真万确.


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 1576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信