老生常谈的一个话题,Activity,也可以说是 “活动” 。
Activity为Android四大组件之一,与用户打交道最为频繁的组件,承担着重要角色,是显示给用户看并可以与用户交互的作用,可见其重要性,这里做个关于Activity的生命周期的笔记,先上个生命周期表供参考。
(一)各方法详解:
onCreate()
表示activity的创建 ,是必须实现的方法,此方法中必须调用setContentView(R.layout.xx)来定义用户界面布局。此方法会不可见不可交互,可做一些不耗时的数据,始终后接onStart()。
onStart()
表示activity的启动,此时已经处于显示状态,只是还没显示在前台,所以无法与用户进行交互。此方法可见,无焦点,不可交互;一般在这里进行动画的初始化;如果转入前台后接onResume(),如果转入隐藏状态后接onStop()。
onResume()
表示activity已在前台显示,可见可交互,始终后接onPause()。
onPause()
表示activity的暂停 ,可见不可交互;不能执行复杂的操作,否则会影响下一个Activity的启动速度;如果转入前台后接onResume(),如果转入对用户不可见状态后接onStop()。
onStop()
表示activity的停止 ,不可见不可交互;如果activity恢复与用户的交互后接onRestart(),如果activity被销毁后接onDestroy()。
onDestroy()
表示activity的销毁,不可见不可交互,系统会释放Activity所保存的资源,出栈或者系统内存不足所触发的强制销毁时才会调用;
onRestart()
在activity已停止并将重启的时候调用;初次创建时不会调用。
onSaveInstanceState()
用于存储Activity的状态信息,只有页面完全不可视时才会调用;
onRestoreInstanceState()
用于恢复Activity的状态信息;
(二)生命周期执行顺序例子:
1,A页面初次启动,其生命周期为:
A:onCreate()
A:onStart()
A:onResume()
2,硬件导致的生命周期变化:
2.1,在A页面按 后退键,其生命周期为(栈中仅存在A页面):
A:onPause()
A:onStop()
A:onDestroy()
2.2,在A页面按 菜单键 在调用此应用,其生命周期为(时间间隔短):
A:onPause()
A:onSaveInstanceState() 此步骤防止系统在后台自动杀死当前Activity,以便于恢复数据
A:onStop()
A:onResatrt()
A:onStart()
A:onResume()
2.3,在A页面按 菜单键 在调用此应用,其生命周期为(时间间隔长,系统已经在后台杀死当前A页面,那么就得调用onRestoreInstanceState()来恢复页面):
A:onPause()
A:onSaveInstanceState()
A:onStop()
A:onResatrt()
A:onStart()
A:onRestoreInstanceState()
A:onResume()
3,页面切换时的生命周期变化(透明/非透明):
3.1 ,A页面 启动 非透明B页面,再返回到 A页面,其生命周期为:
A:onPause() A切换到B
B:onCreate()
B:onStart()
B:onResume()
A:onSaveInstanceState()
A:onStop()
B:onPause() B返回到A
A:onRestart()
A:onStart()
A:onResume()
B:onStop()
B:onDestroy()
3.2 ,A页面 启动 透明的B页面,再返回到A页面,其生命周期为:
A:onPause() A切换到B
B:onCreate()
B:onStart()
B:onResume()
B:onPause() B返回到A
A:onResume()
B:onStop()
B:onDestroy()
4,由系统原因导致的的生命周期变化:
4.1,旋转屏幕,其生命周期为:
A:onPause()
A:onSaveInstanceState()
A:onStop()
A:onDestroy()
A:onCreate()
A:onStart()
A:onRestoreInstanceState()
A:onResume()
(三)其他:
1,结束Activity:通过调用activity的finish()方法来结束Activity;
2,每次新建的Activity必须在AndroidManifest.xml文件中进行声明才能调用,如下;
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
。。。
</application ... >
</manifest >
3,Activity的透明主题样式设置:
– 颜色声明:
<color name="colorTranslucent">#88888888</color>
– 主题样式如下:
<style name="AppThemeTranslucent" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowBackground">@color/colorTranslucent</item>
</style>
– 在AndroidManifest.xml中声明:
<activity android:name=".BActivity"
android:theme="@style/AppThemeTranslucent"/>
4,待。。。