Android - 判断按下Home键或进入后台

两个activity的生命周期方法:

  1. onUserLeaveHint()介绍:
    当一个活动由于用户选择?即将进入后台时,作为活动生命周期的一部分调用。例如,当用户按下Home键时,onUserLeaveHint()将被调用,但是当一个传入的电话呼叫导致正在调用的活动被自动带到前台时,onUserLeaveHint()将不会在正在中断的活动上被调用。在调用它的情况下,这个方法在活动的onPause()回调之前被调用。
    这个回调和onUserInteraction()旨在帮助活动智能地管理状态栏通知;具体来说,用于帮助活动确定取消通知的适当时间。
  2. onUserLeaveHint()介绍:
    每当将键、触摸或轨迹球事件分派给活动时调用。如果您希望知道用户在您的活动运行时以某种方式与设备进行了交互,则实现此方法。这个回调和onUserLeaveHint()旨在帮助活动智能地管理状态栏通知;具体来说,用于帮助活动确定取消通知的适当时间。所有调用你的活动的onUserLeaveHint()回调将伴随着对onUserInteraction()的调用。这确保您的活动将被告知相关的用户活动,如下拉通知窗格和触摸那里的项目。注意,这个回调将被用于开始触摸手势的触摸动作,但可能不会被随后的触摸移动和触摸上的动作调用。

于是我们在退到后台需要做的操作可以放在onUserLeaveHint()中,比如我需要开启在视频播放页退到后台时开启视频悬浮窗。

参考链接说从一个activity依次调用startActivity,finish关闭自己,启动一个新的activity时,onUserLeaveHint也会被调用…需要在启动activity时往intent中加上flag:FLAG_ACTIVITY_NO_USER_ACTION。onUserLeaveHint就不会再被调用了(不过我没复现,不加上也正常)


顺个遍复习一下FLAG:

  1. FLAG_ACTIVITY_SINGLE_TOP: 这个FLAG就相当于加载模式中的singletop
  2. FLAG_ACTIVITY_CLEAR_TOP: 相当于SingleTask,这种FLAG启动的Activity会把要启动的Activity之上的Activity全部弹出栈空间。
  3. FLAG_ACTIVITY_BROUGHT_TO_FRONT: 比方说在A中启动B,Intent中加上这个标记。此时B就是以 FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个启动,在B中再启动C,D,在D中再启动B,最后的栈是 A,C,D,B。A,B,C,D都是标准加载,然后在D中启动A,这个intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT ,这个时候是A,B,C,D,A。
  4. FLAG_ACTIVITY_NO_USER_ACTION:
    onUserLeaveHint()在因为用户要退到background时使用。比如,在用户按下Home键,它将被调用。比如有电话进来(不属于用户的选择),它就不会被调用。
    那么系统如何区分让当前activity退到background时使用是用户的选择?新启动的Activity的Intent里是否有FLAG_ACTIVITY_NO_USER_ACTION来确定。
  5. FLAG_ACTIVITY_NO_HISTORY: 这个FLAG启动的Activity,一旦退出,它不会存在于栈中,比方说!原来是A,B,C这个时候再C中以这个FLAG启动D的,D再启动E,这个时候栈中情况为A,B,C,E。

参考:
https://www.itdaan.com/blog/2016/06/29/266038926097.html
https://blog.csdn.net/m0_70273331/article/details/124509711

猜你喜欢

转载自blog.csdn.net/czssltt/article/details/127685714