写在前面
Activity 是 Android 四大基本组件之一,可以通过 setContentView 方法绑定一个布局用于呈现界面与用户进行交互,是 Android 开发必不可少的内容
介绍
(翻译自Android develop doc:找到安装好的文档,打开
/Users/yourname/Library/Android/sdk/docs/guide/components/activities.html有对Activity的介绍)
Activity是一种应用程序组件,可以提供屏幕让用户可以进行交互,比如打电话、拍照、发邮件、或者浏览地图。每个activity都会提供一个窗口显示用户界面。通常窗口会充满屏幕,不过也会小于屏幕并且悬浮在其他窗口上面。
一个应用程序通常由多个Activity组成,他们松散地彼此绑定。其中一个Activity被称为“main”activity,当用户第一次启动app时显示。每个activity都可以启动另一个activity以完成不同的功能。一旦新的activity启动,之前的activity就会停止,但是系统会将之保留在一个栈(back stack)中。当新activity启动时,它会被推入back stack而且获得用户焦点。back stack遵循“先进后出”的原则,所以,当用户点击后退按钮结束当前activity时,它就会从栈中pop出来并销毁,并且之前的activity会重启。
当一个activity因为另一个activity启动而停止,它会通过activity的生命周期回调方法改变状态。一个activity可能接受到好几个回调函数,不论是创建、停止、重启、销毁,都会造成状态的改变,而且每一次回调都根据相应的状态改变提供机会调用特定的功能。比如,当activity停止时,activity应该释放一些占用内存大的对象,如网络或数据库连接。当activity重启时,你可以继续获取需要的资源和重启actions。这些状态的转变构成了activity的生命周期。
生命周期
Activity生命周期.png为了测试生命周期方法的调用顺序,新建两个activity分别用A、B表示,其中A是mainActivity,在A中添加一个按钮,点击该按钮可以启动B activity。在各自的生命周期方法中打印日志,例如在A的onCreate方法中打印“onCreate--A”,以此类推。
- 运行app:
onCreate -- A、onStart -- A、onResume -- A - 点击home键回到桌面:
onPause -- A、onStop -- A - 重新打开app:
onRestart -- A、onStart -- A、onResume -- A - 点击A中的跳转按钮:
onPause -- A、onCreate -- B、onStart -- B、onResume -- B、onStop -- A - 点击返回按钮:
onPause -- B、onRestart -- A、onStart -- A、onResume -- A、onStop -- B、onDestroy -- B
调用顺序很容易理解:当启动另一个activity时,A会先pause,然后B开始显示,等B完全显示之后,A才会stop。同样在返回时,B会先pause,等A完全显示时,B会stop,进而destory
还有一种情况是,后来启动的B是一个dialog,只是作为一个窗口悬浮在A上面,B启动之后A还是可见的。这时的调用顺序会怎样呢?
在AndroidMainfest.xml文件中将B的标签改为:
<activity android:name=".BActivity"
android:theme="@style/Base.Theme.AppCompat.Dialog">
</activity>
- 运行app:
onCreate -- A、onStart -- A、onResume -- A - 点击A中的跳转按钮:
onPause -- A、onCreate -- B、onStart -- B、onResume -- B - 点击返回按钮:
onPause -- B、onResume -- A、onStop -- B、onDestroy -- B
可见,由于A在B显示之后仍然显示,所以并没有stop,返回时也不会调用restart和start
网友评论