猿问

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

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

我正在尝试编写一个应用程序,当它在经过一段时间后返回到前台时,它会做一些特定的事情。是否有一种方法可以检测应用程序何时被发送到后台或被带到前台?



慕标琳琳
浏览 1577回答 3
3回答

四季花海

这个onPause()和onResume()当应用程序被带到后台并再次进入前台时,将调用方法。但是,当应用程序第一次启动时,以及在其被杀死之前,它们也会被调用。你可以读到更多活动.在后台或前台没有直接获取应用程序状态的方法,但即使是我也面临过这个问题,并找到了解决方案onWindowFocusChanged和onStop.欲知更多详情,请到此查询。Android:用于检测Android应用程序何时进入后台并返回到前台的解决方案,而不需要getRunningTask或getRunningAppProcess.

海绵宝宝撒

我就是这样解决这个问题的。它的工作前提是,在活动转换之间使用时间引用最有可能提供充分的证据,证明应用程序已经“背景”或没有。首先,我使用了一个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()启动计时器,但是几乎立即被输入的新活动在达到最大转换时间之前取消了计时器。所以黄蜂地会是假的.另一方面,当活动从发射器、设备唤醒、电话结束等到达前台时,很可能是在此事件之前执行的计时器任务,因此黄蜂地被设置为千真万确.
随时随地看视频慕课网APP

相关分类

Android
我要回答