转载请注明:http://blog.youkuaiyun.com/ly20116/article/details/50960325
一、Activity的状态(3种状态)
1、Resumed(running)
Activity位于屏幕前面,且拥有用户焦点
2、Paused
本Activity没有用户焦点,但是可见,即另一个activity在前台并拥有焦点,覆盖在本activity的上面,并且那个activity是部分透明的或没有覆盖整个屏幕。本Acitivity对象存在内存中,当系统严重需要内存时才杀死它。
3、Stopped
Activity位于后台,不可见,被其它Activity完全覆盖,但是还会保存在内存时,当需要内存时就会杀死它。
系统回收Activity的优先级,Stopped->Paused->Resume。(从高到低)
二、Activity生命周期
Activity的生命周期共有7个方法:
1、onCreate()
必须实现的方法,创建Activity时调用它。可以在这个函数中进行一些初始化操作,如调用setContentView() 来指定activity用户界面的布局layout
2、onStart()
在onCreate()方法或OnRestart()方法后调用,用来显示用户界面,用户可见,但是没有焦点。
3、onResume()
在onStart()方法后调用,用户可见,有焦点,可以与用户交互。此时Activity在栈的顶端。
4、onPause()
当另一个Activity进入前台时调用,这个方法通常用来把未保存的改动提交为永久数据、停止动画播放、以及其它可能消耗CPU的工作等等。要求应该快速完成工作,因为此方法完成后另一个Activity才会恢复运行。如果用户返回这个Activity则调用onResume()方法,如果Activity不可见,则调用onStop()方法。此方法后Activity可以被直接杀死。
5、onStop()
Activity对用户不可见时调用,原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。
如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy()。此方法后Activity可直接被杀死。
6、onRestart()
Activity被暂停,又被启动时调用。
7、onDestory()
Activity销毁前调用。这是activity收到的最后一个调用。 可能是因为activity完成了工作(有些人在这里调用finish()), 也可能是因为系统为了腾出空间而临时销毁activity的本实例。 可以利用isFinishing() 方法来区分这两种情况。此方法有Activity会被杀死。
完整生命周期 onCreate()->onDestory()
可见生命周期 onStart()->onStop()
生存生命周期onResume()->onPause()
三、Activity状态的保存
1、onSaveInstanceState(Bundle outState)
使用Bundle对象的putString()方法,以键值对的方式保存Activity状态.
重建Activity时系统会将Bundle对象传入到onCreate()会onRestoreInstanceState()方法中。最好调用一次父类的方法,父类的方法会保存一些UI信息。它通常会在 onStop() 方法之前并且可能是在 onPause() 之前调用,但是当用户使用BACK键离开Activity时不会调用这个方法。它应该用来保存Activity的临时信息(UI状态),对于永久的数据应在onPause()方法中保存。
2、onRestoreInstanceState(Bundle savedInstanceState)
获取Activity的状态,进行恢复。
这两种方法在屏幕方向改变时经常被使用。
四、Activity启动模式
设置Activity启动模式的方法:
在AndroidManifest.xml文件中配置Activity的属性android:launchMode=”“:
<activity
android:name=".LifeActivity"
android:label="@string/title_activity_life"
android:launchMode="standard" >
</activity>
1、Standard模式
标准模式,也是默认模式。
只要创建Activity就会创建一个新的实例加入任务栈中,如果退出就销毁这个实例。
2、SingleTop模式
如果要激活的Activity在任务栈的栈顶,则就重启Activity,不会创建新的实例。如果不在栈顶,就会创建新的实例加入任务栈。
3、SingleTask模式
系统创建一个新的任务栈,将Activity放入任务栈,如果Activity在其它任务栈中已存在,则系统会通过调用其实例的onNewIntent() 方法把 intent 传给已有实例,Activity处在栈顶位置。如果任务栈不存在这个Activity,则创建新的实例。总而言之,此 activity 同一时刻只能存在一个实例。
4、SingleInstance模式
此模式下,Activity是任务栈中的唯一成员,位于任务栈的栈顶,它所启动的任何 activity 都会放入其它任务栈中。
五、Activity启动设置
设置为启动项:
在AndroidManifest.xml文件中Activity结点中设置:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>