onCreate & onStart & onResume & onStop & onPause & onDestroy & onRestart & onWindowFocusChanged

一.函数调用情形


1.启动游戏

onCreate

onStart

onResume

onWindowFocusChanged


2.锁屏(已启动游戏)

onPause

onStop

onWindowFocusChanged


3.开锁(已启动游戏)

onRestart

onStart

onReume

onWindowFocusChanged


4.home键(已启动游戏)

onPause

onWindowFocusChanged

onStop


5.多任务切回程序(开启程序,home键切换程序到后台)

onRestart

onStart

onResume

onWindowFocusChanged


6.点击应用图标重启程序(开启程序,home键切换到后台)

onRestart

onStart

onResume

onWindowFocusChanged


7.点击back键(已开启程序,back键未自己处理)

onPause

onWindowFocusChanged

onStop

onDestroy


8.点击多任务键(已开启程序)

onPause

onStop

onWindowFocusChanged


9.再点击多任务键切回程序(已开启程序,且已点击多任务键)

onRestart

onStart

onResume

onWindowFocusChanged


10.下拉菜单(已开启程序,从屏幕上往下拉)

onWindowFocusChanged


11.收回下拉菜单(已开启程序,且下拉菜单已显示)

onWindowFocusChanged


12.显示一个AlertDialog对话框(非全屏)

onWindowFocusChanged


13.关闭一个AlertDialog对话框(非全屏)

onWindowFocusChanged


14.从A activity 启动 B activity (已启动A activity, 点击button 启动Bactivity, B activity 全屏大小)

A onPause

A onWindowFocusChanged

B onCreate

B onSstart

B onResume

B onWindowFocusChanged

A onStop


15.从B activity 返回 A activity (A 启动了 B,现处于B activity)

B onPause

A onRestart

A onStart

A onResume

A onWindowFocusChanged

B onWindowFocusChanged

B onStop

B onDestroy


16.从A activity 启动 B activity (已启动A activity, 点击button 启动 B activity, B 是对话框风格Theme.Dialog ,即B activity 非全屏大小)

A onPause

A onWindowFocusChanged

B onCreate

B onSstart

B onResume

B onWindowFocusChanged


二.调用情形分析

1.onPause 和 onStop 有什么不同

(a)  我们可以对比一中的14和16的情形,可以发现,只要A activity还可见,就不会调用A onStop。所以我们可以知道onStop调用时机是:当一个activity对用户已经不可见

的时候就会调用。

(b)  官方说明:onStop可能永远不会被调用:当处于低内存状态下,系统没有足够的内存保持你的activity的处理运行在activity的onPause调用之后

(c)   从(b)知道onStop在低内存情况下不会被调用,但是:onPause一定会被调用! 所以我们可以将一些保存当前activity的数据的行为,放到onPause()中调用!!!!

(d)   onPause中处理保存activity中的数据,对应的我们在onResume中恢复保存的数据。


2.onWindowFocusChanged 官网文档解释

  当前activity的窗口获得或失去焦点的时候会调用,这个函数是最好的方向标对于activity是否对用户可见,它默认的实现是清除键跟踪状态,所以应该总是被调用。

  它也提供了全局的焦点状态,它的管理是独立于activity生命周期的。当焦点改变时一般都伴随着 生命周期的改变,你不应该依赖onWindowFocusChanged 调用和其他生命周期的方法(例如onResume) 的先后顺序,来处理我们要做的事情

  通常的规则是,当一个activity被唤醒,那么就拥有窗口焦点。除非这个窗口已经显示了对话框或者其他弹出框抢占焦点,这个窗口只有等到这些对话框关闭后,才能

获取焦点,同理,当系统显示系统级的窗口,系统级的窗口会临时的获取窗口输入焦点同时不会暂停前景 activity.


  自我总结:我们可以从一得调用情形中发现:大多数情况下只要调用了onResume 就会调用 onWindowFocusChanged,但是也可以发现当我们显示下拉菜单的时候

只会调用onWindowFocusChanged。我们可以假设一个情况:我们在下拉菜单中改变了网络的状态(开启或者关闭),我们这时候就不能在onResume()中处理更新

网络状态,而应该将更新网络状态放到onWindowFocusChanged中处理。


3.onResume 官网文档解释

  对于你的activity来说,onResume调用后就可以和用户交互,这是很好的地方去开始动画,打开互斥访问设备元件(例如:照相机),etc.

  但是有一点我们必须认清:onResume不是最好的指向标说明你的activity对于用户是可见的,例如系统的窗口可能在你的activity前面。所以应该用:onWindowFocusChanged来知道我们的activity是否对用户可见


 

 







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值