关于Activtity必须知道的

来源:互联网 发布:淘宝推广计划怎么写 编辑:程序博客网 时间:2024/06/06 19:18

3种状态:

  • 激活态:位于屏幕最前端

  • 暂停态:被一个透明或半透明Activity覆盖(Dialog

  • 停止态:被一个Activity完全覆盖

主要接口:

  • onCreate:创建时

  • onStart:在Framework中数据结构准备完毕后

  • onResume:来到栈的最前端,变为激活态时

  • onPause:从栈的最前端切换到后台,进入暂停态时

  • onStop:完全不可见时

  • onDestory:被清除时

Acitivity生命周期

    必调用的三个方法:onCreate()--> onStart() -->onResume(),用AAA表示

1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA--> onPause() --> onStop() --> onRestart()-->onStart()--> onResume() …
2)用户点击HomeActvity调用顺序如下
AAA--> onPause() --> onStop() --
Maybe-->onDestroy() – Maybe
3)调用finish()Activity调用顺序如下
AAA--> onPause() --> onStop() -->onDestroy()
4)在Activity上显示dialogActivity调用顺序如下
AAA
5)在父Activity上显示透明的或非全屏的activityActivity调用顺序如下
AAA--> onPause()
6)设备进入睡眠状态,Activity
调用顺序如下
AAA--> onPause()





onPauseonStop的区别


onPause用于由一个Activity转到另一个Activity、设备进入休眠状态(屏幕锁住了)、或者有dialog弹出时

onStop用于不可见的Activity(有对话框弹出时,这时底下的activity仍然可见,所以此时onStop不会被调用)

从下面的日志日志可以看出区别:

1.FirstActivity跳到SecondActivity

FirstAcvity---> onCreate

FirstAcvity--->onStart

FirstAcvity--->onResume

FirstAcvity--->onPause

SecondActivity--->onCreate

SecondActivity--->onStart

SecondActivity--->onResume

FirstAcvity--->onStop

现在给AndroidMainfest.xml中的SeconedActivity属性加入android:theme="@android:style/Theme.Dialog",SeconedActivity将以对话框形式出现,不会对FirstAcvity形成遮盖.

这时的状态输出为:

FirstAcvity---> onCreate

FirstAcvity--->onStart

FirstAcvity--->onResume

FirstAcvity--->onPause

SecondActivity--->onCreate

SecondActivity--->onStart

SecondActivity--->onResume

这时FirstAcvity比完全遮盖时少调用了onStop方法.


以下两种情况下都只会触发onPause而不会触发onStop

1.一个透明的包含DialogActivity出现

2.poweroff锁屏


显示一个非activityDialog,是不会调用onPauseonStop的,因为此Dialog属于activity


横竖屏切换时候Activity的生命周期:

  • 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 (onPause -> onSaveInstanceState -> onStop ->onDestroy ->onCreate ->onStart ->onRestoreInstanceState ->onResume)

  • 设置Activity的android:configChanges=“orientation”时,横屏一样,竖屏时只会执行一次并执行onConfigurationChanged方法

  • 设置Activity的android:configChanges=“orientation|keyboardHidden”时,横屏、竖屏只会执行onConfigurationChanged方法


0 0