码迷,mamicode.com
首页 > 移动开发 > 详细

android-生命周期介绍

时间:2015-03-01 08:55:38      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

打开应用:onCreate()->onStart()->onResume

BACK键:onPause()->onStop()->onDestory()

HOME键:onPause()->onStop()

再次启动:onRestart()->onStart()->onResume()


技术分享

三个嵌套循环

1.整体生命周期:onCreate -> ... ... -> onDestroy

2.可视生命周期:onStop -> ... ... -> onPause

3.焦点生命周期:onPause -> onResume


四个阶段

1.开始Activity:在这个阶段依次执行3个生命周期方法:onCreateonStartonResume

2.Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,这时当前的Activity会失去焦点。在这一阶段,会依次执行onPauseonStop方法。

3.Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期方法:onRestartonStartonResume

4.关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法:onPauseonStoponDestroy


七个方法

1. void onCreate(Bundle savedInstanceState)

Activity被第首次加载时执行。我们新启动一个程序的时候其主窗体的onCreate事件就会被执行。如果Activity被销毁后(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行。注意这里的参数 savedInstanceStateBundle类型是一个键值对集合,大家可以看成是.Net中的Dictionary)是一个很有用的设计,由于前面已经说到的手机应用的特殊性,一个Activity很可能被强制交换到后台(交换到后台就是指该窗体不再对用户可见,但实际上又还是存在于某个Task中的,比如一个新的Activity压入了当前的Task从而“遮盖”住了当前的 Activity,或者用户按了Home键回到桌面,又或者其他重要事件发生导致新的Activity出现在当前Activity之上,比如来电界面),而如果此后用户在一段时间内没有重新查看该窗体(Android通过长按Home键可以选择最近运行的6个程序,或者用户直接再次点击程序的运行图标,如果窗体所在的Task和进程没有被系统销毁,则不用重新加载,直接重新显示Task顶部的Activity,这就称之为重新查看某个程序的窗体),该窗体连同其所在的 TaskProcess则可能已经被系统自动销毁了,此时如果再次查看该窗体,则要重新执行 onCreate事件初始化窗体。而这个时候我们可能希望用户继续上次打开该窗体时的操作状态进行操作,而不是一切从头开始。例如用户在编辑短信时突然来电,接完电话后用户又去做了一些其他的事情,比如保存来电号码到联系人,而没有立即回到短信编辑界面,导致了短信编辑界面被销毁,当用户重新进入短信程序时他可能希望继续上次的编辑。这种情况我们就可以覆写Activityvoid onSaveInstanceState(Bundle outState)事件,通过向outState中写入一些我们需要在窗体销毁前保存的状态或信息,这样在窗体重新执行onCreate的时候,则会通过 savedInstanceState将之前保存的信息传递进来,此时我们就可以有选择的利用这些信息来初始化窗体,而不是一切从头开始。


2. void onStart() activity变为在屏幕上对用户可见时调用。

onCreate事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体前已经过去了一段时间,窗体已经执行了onStop事件,但是窗体和其所在进程并没有被销毁,用户再次重新查看窗体时会执行onRestart事件,之后会跳过onCreate事件,直接执行窗体的onStart事件。


3. void onResume() activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。

onStart事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体时,窗体还没有被销毁,也没有执行过onStop事件(窗体还继续存在于Task中),则会跳过窗体的onCreateonStart事件,直接执行onResume事件。


4. void onPause() activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!

窗体被交换到后台时执行。


5. void onStop() activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onPause事件之后执行。如果一段时间内用户还没有重新查看该窗体,则该窗体的onStop事件将会被执行;或者用户直接按了Back键,将该窗体从当前Task中移除,也会执行该窗体的onStop事件。


6. void onRestart() 重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。

onStop事件执行后,如果窗体和其所在的进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart事件,onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。


7. void onDestroy() activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源!

Activity被销毁的时候执行。在窗体的onStop事件之后,如果没有再次查看该窗体,Activity则会被销毁。


技术分享

1.onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。

onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。

2.onStart :该方法的触发表示所属活动将被展现给用户。

3.onResume :当一个活动和用户发生交互的时候,触发该方法。

4.onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。

5.onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。

6.onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。

7.onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。

8.onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。

通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。

 

android监听事件添加动作的三种方式


第一种也是最开始就接触的方式,通常在activity组件的oncreate事件中直接定义,直接动作。这种方式每个控件都定义一次,通常不方便。

Button btn = (Button) findViewById(R.id.myButton);

btn.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

//do something

}

});


第二种通常是在activity组件实现其接口,这样可以多外控件共享一个接口,这样相对方便。

public class My Activity extends Activity implements View.OnClickListener{

@Override

public void onClick(View v){

switch (v.getId()){

}

}

}


第三种类似第二种,定义一个具体的实例,这样的好处在于如果需要实现多个监听接口,这样更清晰 。

class MyClickListener implements View.OnClickListener

@Override

public void onClick(View v) {

switch (v.getId()) {

}

}

}


android-生命周期介绍

标签:

原文地址:http://www.cnblogs.com/lin-lin/p/4306581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!