zoukankan      html  css  js  c++  java
  • (原创)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;

  • 相关阅读:
    Sqlite Administrator
    在资源管理器/我的电脑详细信息视图里按下Ctrl+(小键盘+)
    Asp.net 2.0 Membership Provider for db4o 6.1
    测试使用Zoundry发布blog
    我的WCF之旅(8):WCF中的Session和Instancing Management
    我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承
    我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)
    我的WCF之旅(4):WCF中的序列化[上篇]
    我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案
    我的WCF之旅(4):WCF中的序列化[下篇]
  • 原文地址:https://www.cnblogs.com/l_dragon/p/2133784.html
Copyright © 2011-2022 走看看