Android学习->Activity生命周期(二)

Task基本概念

task就是一个栈(数据结构),栈中存放了很多Activity,遵循后进先出的原则,压栈和弹出两种

例子

这里创建了三个Activity,Demo_1Activity中有一个按钮,点击按钮可以跳到第二个Activity中去,Demo_2Activity中也有一个按钮,点击按钮可以跳到第三个Activity中去,Demo_3Activity中也有一个按钮,点击后会启动发送短消息的页面。前三个Activity是三个应用程序,而第四个Activity是Android自带的另外一个应用程序。这其中,三个Activity和第四个界面共同组成了一个task.。
应用程序启动后,运行到第一个Activity后,该Activity对象被压入到Stack中去,接着点击按钮,第二个Activity也被压入栈中去,手机永远显示的是栈顶的Activity,同理点击按钮启动第三个Activity的话,第三个Activity变为栈的顶部,再点击按钮的话,第四个发送短消息的Activity被压入栈中去,变为栈顶。
注意,前面三个Activity还是存在的,知识被压入栈中去看不到而已,并没有被销毁。点击back按钮的话,这时发送短消息的Activity会从栈中被弹出来,第三个Activity变为栈顶,显示Demo_3Activity界面。
这就是Task的作用,它可以把不同应用程序中的Activity组织在一起。即所有在同一个task中的Activity被组织为同一个单元。

接下来做点小小改变,在第二个Activity转换到第三个Activity中去的过程中,最后加上finish();再次运行应用程序。这样从第三个Activity点击back按钮,直接回到第一个Activity。
task中的Activity的顺序是无法改变的。

例子二

这里有两个Activity,启动程序,从第一个Activity点击按钮可以跳到第二个Activity去,但是注意,这里的第二个Activity是以窗体的形式出来的,并没有占满整个屏幕,第一个Activity变为灰色的了,其中的按钮点击不了,点击第二个Activity的按钮,可以回到第一个Activity中去。这里是以窗体形式出现的Activity。
窗体Activity和之前的Activity没有很大区别,只是在res文件夹下的AndroidMainfest.xml中有点区别:在第二个Activity的属性中加上一个属性(android:theme,指定它的属性是Theme.dialog,对话框风格的),这种Activity在以后的使用中十分广泛,也让我们更加了解Activity的生命周期。
在这个例子中,点击按钮进入第二个Activity后,不会再调用第一个Activity的onStop方法,因为第二个Activity并没有完全遮住第一个Activity。

最后一个重点

运行再手机上的应用程序需要考虑电量的问题,毕竟一个需要耗费很多电量的应用程序是对用户不友好的。
Android应用程序会在一定时间关闭掉它认为不必要不重要的Activity。
如果一个Activity调用了onPause方法,或者onStop方法,或者onDestroy方法之后,这样在现有资源不足以维持用户使用的情况下,Android会自动关掉(kill掉),这样下次调用的时候需要重新onCreate被kill掉的Activity。

猜你喜欢

转载自blog.csdn.net/weixin_42882887/article/details/81665576