(原创)Android入门教程(十五)之-- Activity生命周期及其配置使用
一、 Activity介绍
activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一,在android的程序中,activity一般代表手机屏幕的一屏,如果把手机比作一个浏览器,那么activity就相当于一个网页, 对于Activity,关键是其生命周期的把握(如下图),
正如图形所示,当我们第一次启动一个Acitivity1时,会按下列顺序调用Acitivity1的方法onCreate()->onStart()->onResume(),然后Acitivity1就会显示在手机屏幕上。这个时候如果你点击按钮或者做操作切换到了另外一个Activity2,Activity2遮挡住了Activity1,Actitity1就会调用onPause()方法,这时Activity1有三种可能,第一种Activity2被关闭,Activity1重新显示在手机屏幕中,这时会调用Activity1的onResume()方法,重新显示Activity1。第二种Activity1不能再显现,会调用其onStop()方法。第三种就是Activity1被onPause()后,系统内存不够,要释放空间,就可能会杀掉Activity1,如果要重新显示Activity1需要重新调用其onCreate()方法。
当Activity1调用onStop()以后,同样有三种选择,第一种是调用onDestroy()销毁,结束Activity1。第二种是又让Activity1显现出来,这时调用的是Activity1的onRestart()方法。
最后一种是系统内存不够,释放空间。
引用一段网上比较好的比喻可以这样比喻:
我们把Activity比作一本书,我们要看书,首先从书架上取出书(onCreate),然后放到桌上(onStart),接着打开书(onResume),这样我们就可以看书并可以在书本上写字了。
如果这时候我们要启动另一个Activity,也就是要看另一本书,首先我们放下手中的笔或者说合上书(onPause),然后从书架上拿下另一本书(书2:onCreate),然后把书本2放到桌上并打开(书2:onStart、onResume)。
如果书本1被书本2完全盖住了,即不可见了,就调用书本1的onStop;而如果书本2较小,没有完全盖住书本1,则不会调用。
我们还可以把书本1放回书架上,即onDestroy。
另外,还有一点要注意,Activity在处于onPause、onStop、onDestroy状态下,系统都可以销毁该Activity所在进程,所以我们在处理一些要保存的数据时,必须在onPause方法中进行,因为onStop和onDestroy方法不一定会被调用。
二、 Activity配置与使用
在Android项目中有一个非常重要的配置文件AndroidManifest.xml,
<application android:icon="@drawable/myicon" android:label="@string/app_name"> application配置节点用来设置应用程序的配置信息,
android:icon表示应用程序的图标,android:label表示应用程序的名称,我这里的示例配置中@drawable/myicon表示图标取自res->drawable->myicon.jpg
android2.1以后图标资源又分成了三个子目录,应该是res->drawable-hdpi->myicon.jpg,string/app_name表示应用程序名称取自res->values->strings.xml中的<string name="app_name">项目名称</string>配置节
项目中的所有的Acitivity要能运行,必须在<application >节点下配置<activity/>节点基本规则如下:<activity android:name="您要使用的Activity所在的类名"></activity>
activity 这么多,怎么确定哪个activity 是启动项目时第一个运行的呢?
<activity android:name="com.ui.Main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
像以上这个示例如果有 <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> 表示这个Activity是启动时运行的第一个Activity。
类名是com.ui.Main;