androidactivity生命
Ⅰ 如何理解Android中Activity的三个“生命周期”
下图是官方文档里的Activity生命周期图,其中彩色标出的四个框是Activity的四种状态,当Activity的状态改变时会触发一个或多个onXXX()方法。
onCreate()
当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。
onRestart()
这个我比较少用到,按文档上的介绍,如果Activity之前被stop过,那么下一次onStart()方法之前会先触发这个方法。
onStart()
只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。
onResume()
当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。
onPause()
和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。
onStop()
当有其他Activity覆盖了当前Activity时,不论另一个Activity是新开始的还是从下层移至最上层的,当前Activity的onStop()方法都会被触发。
onDestroy()
Activity生命周期的终点。有两种情况会导致它被触发:1)执行了Activity#finish()方法;2)Android系统由于资源不足等原因决定杀掉Activity所在进程。通过isFinishing()方法可以判断出是哪种情况。在这个方法里,我们一般要做的事情是释放Activity占有的资源,例如后台正在进行的下载线程等等。
最后,举个实际例子来说明,假设你有一个“首页Activity”和一个“编辑页Activity”。
•当用户点击首页里的“开始编辑”按钮时,首页的onPause()->onStart()onStop()依次触发,编辑页的onCreate()->onStart()->onResume()依次触发;(感谢James.H.Fu指出的错误)
•当用户在编辑页按下“返回”按钮时,编辑页的onPause()->onStop()依次触发,之后首页的onStart() -> onResume()依次触发;
•这时用户在首页按下“返回”按钮,首页的onPause()->onStop()->onDestroy()依次触发。
Ⅱ android寮鍙戜腑镄𪞝ctivity鐢熷懡锻ㄦ湡鏄浠涔淇濆瓨activity镄勪竴浜涗俊鎭鍦ㄥ摢涓鐢熷懡锻ㄦ湡鏂规硶涓
銆愮瓟妗堛戯细鍏辨湁涓冧釜锻ㄦ湡鍑芥暟锛
void onCreate(Bundle savedInstanceState) 绗涓娆″垱寤烘椂璋幂敤
void onStart() 琚鐢ㄦ埛鍙瑙佹椂璋幂敤
void onRestart() 褰揂ctivity澶勪簬stop鐘舵佸张琚閲嶆柊钖锷ㄦ椂璋幂敤
void onResume() 褰撹幏寰楃剑镣瑰嵆鍙涓庣敤鎴蜂氦浜掓椂璋幂敤
void onPause() 褰揿け铡荤剑镣规椂璋幂敤
void onStop() 褰扑笉鍙瑙佹椂璋幂敤
void onDestroy() 褰挞攒姣佹椂璋幂敤
Ⅲ Android中,activity生命周期是指什么
一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。
所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。
运行中的应用程序分为五大类,分别是:
前景模式:foreground process
可见模式:visible process
背景模式:background process
空白模式:empty process
服务模式:service process
除了最后一个,貌似service process是Service的事情了。其他都与Activity相关。
Android系统会判断应用程序Activity是属于哪一个类,给予不同的Activity生命周期。
Activity的生命周期也是它所在进程的生命周期。
Activity生命周期的运行如图:
Activity生命周期的每一个阶段都表示为金字塔上的一个台阶,当系统创建一个新的activity时,每一个回调函数都把activity的状态网上挪一步。
金子塔的最顶层就是activity运行在前景模式下,用户可与之交互。
当用户离开activity时,系统调用另一些回调函数,将activity的状态从金字塔中一步一步移下来。有些情况下,activity只移动一部分,并没有完全到底,这些情况下仍然可以移动回顶部。
注意这些状态中只有三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:
Resumed:foreground,用户可交互running state
Paused:部分被遮挡,不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。
Stopped:activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。
其他状态都是转换状态,系统会很快调用其他相应的回调函数离开这些状态。比如系统调用onCreate()之后,会很快调用onStart(),之后是onResume()。
相信不少朋友也已经看了以上的分析之后,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程。
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
有关于Activity的生命周期是Android中最基础和最重要的知识,如果你想系统的了解一下Activity的生命周期,推荐你可以去一个叫做秒秒学的教程网站上看看。