前言:activity作为四大组件之一,作为android开发者,对它的生命周期都很了解,但是当调用一些系统方法的时候,问你生命周期怎么走的,一脸懵逼.....
1>生命周期
2>问题
生命周期:
问题1:
finish return前者:打印了"我执行了" 后者没有,可以理解为调用finish并没有立刻走onDestory,当接下来你的代码是针对传进来的data的就有问题了,那么什么时候调用onDestory呢?接着看👇
打印的log:会一直打印"我还在执行",并没有执行onDestory(),即使我现在回退到了我上一个界面
1>上一个界面是一个activity,现在点击back,发现没反应了,当然打印仍在继续
2>上一个界面是桌面,打印仍在继续
解释:android只有一个主线程,finish并不是终止掉这个线程,所以还是会执行,所以建议使用return
问题2:finish与onBackPress区别
(1)没有弹框/菜单/共享变换/fragment----该情况,finish和onBackPressed是完全一样的。
(2)存在弹框、菜单等-----该情况,onBackPressed要先关闭popWindow
(3)存在共享变化-----该情况,finish不会调用变换动画,必须使用onBackPressed方法。
Android开发,源码分析finish()和onBackPressed()的区别 - Stanny_Bing的博客 - CSDN博客
问题3:killProcess()、System.exit(0)及finish()的区别
这两个方法都会直接杀死当前进程,与finish()的区别在于,这两个方法执行时,是直接将整个进程杀死,并且释放内存资源,经过测试之后发现,当执行这两个方式时,他们会绕过Activity的生命周期方式,直接将进程kill掉。
当然,说起kill掉整个进程,我们这里就不得不提一下Service,Service是属于后台服务进程,与Activity不同的是,当程序退出时,Service会继续工作,但是,在执行这两个方法后,连同Service一起杀死,这样说起来大家是不是就能感觉出两个的区别呢?
可是,还有意外,就是这两个方法在杀死进程之后,很可能app会进行重新启动(很可能是android os会认为他是意外终止的程序,比如内存不足等,os底层有监听服务,当app意外终止会自动重启);如果在Service中,也会与Service的onStartCommand()方法的返回值有关,我们都知道它可以返回粘性或者非粘性等,为了防止后台Service被意外终止,可以重新启动,当执行这两个方法后,android os很可能会认为这个进程是被意外终止的,所以根据Service的粘性来进行重启。
这个有一部分也是在网上别人的经验的分享,具体详细的流程如果大家有兴趣的可以自己测试一下,很简单的,也就几行代码就可以搞定,这里我就不在详细测试了。
其实 Process.killProcess 或 System.exit(0) 都不应该直接调用, 进程是由 os 底层进行管理的,android 系统会自己进行处理回收进程。退出应用你就直接 finish 掉 activity 就行了
Android中killProcess()、System.exit(0)及finish()的区别 - freelander_j的博客 - CSDN博客
问题4:activity 1切换到activity 2
(1)activity 2不透明:
onPause---2 onCreate---2 onStart--2onResume--onStop
(2)activity 2透明:无onStop
网友评论