Android入门之Activity

Activity的介绍

原文地址:http://blog.csdn.net/Vange

===============================================

 

一个Application由多个Activity组成,不同的Activity来完成不同的功能

Android系统高层应用都由多个Activity组成,每一个Activity来完成对应的功能控制,类似于MVC模式中的C(控制器),它负责数据处理、控制界面的选择及部分显示。Activity的耦合性很低,只要app中设置了对应的Intent-filter则,其他的app也可以调用它的Activity,对于多种调用选择时,系统会弹出菜单列表来由用户选择。

Activity用界面来表示自己,并不一定都显示整个屏幕,有时也只是显示在屏幕最上面的一小部分

每个Activity都会用setContentView()来设置对应的视图来显示自身的数据。大部分显示时都是显示在整个屏幕,但有时也只是显示屏幕的一部分,如一些app在加载时的进度圈、在屏幕上方的字典查询。

Application有一个主的Activity来作为入口,由它启动其他的Activity

Activity都会有一个主的Activity来作为启动的入口,在创建时必要在文件中创建哪下标识:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">

    <intent-filter>

        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />

    </intent-filter>

</activity>

android.intent.action.MAIN 表示此Activity为App的入口;

android.intent.category.LAUNCHER则表示此入口为系统的图标或快捷方式启动;

(相关的intent-filter介绍在以后文章再补充)

 

但App并不只能有一个入口,也有可能是由intent-filter打开方式启动app。

 

创建一个简单的Activity

1.         第1步:创建继承于Activity的子类,作为实现Activity的逻辑代码。

2.         第2步:在AndroidManifest.xml文件中在Application节点内创建以下片断,一般用IDE创建时,都已经自己生成对应的XML。

<activity android:name=".activity.Second"></activity>

3.         第3步:在主Activity中调用新的Activity。

startActivity(new Intent(this,Second.class));

一般建议调用Activity的方法由新的Activity(Second类)的静态方法来提供,而调用时,只需传递入对应的参数,由新的Activity来组成Intent进行调用,这样可以把逻辑都放于对应的Activity,代码会显得更加清晰。如以下代码(摘自K-9 Mail开源代码:

public static void actionSettings(Context context, Account account) {

                   //在这里组装一个Intent

        Intent i = new Intent(context, AccountSettings.class);

                   //加入对应需要的数据,放于Intent里面

        i.putExtra(EXTRA_ACCOUNT, account.getUuid());

                   //启动对应的Activity

        context.startActivity(i);

    }

 

Activity的显示顺序队列遵循栈的模型

后入先出,最前打开的Activity在最上面

在同一个app里面每一个Activity被启动后,原来的Activity将会被放入到 Activity返回顺序栈 里面,如图(摘自Android网站):

1、  启动主Activity,可能是用系统的图标启动,也可能是用Intent-filter启动,此时Activity 1就被放入到 Activity返回顺序栈中。

2、  当点击“Start Activity 2”按钮时,系统将拉起新的Activity 2,此时Activity 2将被放入到栈中;

3、  当点击“Start Activity 3”按钮时,系统将拉起新的Activity 3,此时Activity 3将被放入到栈中;

4、  当点击返回按钮时,系统将会把Activity 3退出,返回到Activity 2;

当Finish()的Activity将不会放入到队列中

如图:

1、  主Activity被拉起;

2、  主Activity拉起Activity 1,此时栈中显示如2;

3、  当Activity 1 拉起 Activity 2后,调用了finish()方法,则Activity 1 将不会被放入到栈中,而是直接结束了生命周期,而Activity 2 则被放入栈中,当再次按返回键时,则返回到主Activity;

 

针对目前有许多的app需要按多次返回键后才能退出,有时还是在同一Activity界面出现多次,可以使用此方法进行解决,例如以下代码:

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.custom);

        startActivity(new Intent(this,Second.class));

        finish(); //启动后直接调用finish()方法结束生命周期

}

Activity的生命周期简介

生命周期

每次App被拉起后Activity就开始了自己的生命周期,它有可能显示在最前方,也有可能显示在其他Activity后面,有时它隐藏在其他Activity后面时还会被系统回收(在系统资源紧张的情况下),有时它被其他app调用,直到最终结束自己的生命周期。

每一个周期都会回调Activity实现类中的对应的代码,如 onCreate()、onStart()等。请看下图:

1、  onResume()是一个关键点,无论Activity是第一次被拉起,还是重新回到前端,都需要调用此回调函数,所以对于数据及界面的初始化都可以在此方法里面进行处理;

2、  onSaveInstanceState()是当新的Activity将要被拉起的情况下回调使用,根据函数名可以看出此回调函数主要做一些数据的保存,以防止当Activity再次被使用时无法初始化原来的场景;

3、  这个关键点是当系统资源紧张或者用户使用某些进程管理软件将App进行杀掉,许多App在开发时没有考虑到此点,所以会出现应用在后台放置了一段时间,当用户再使用此App时,就出现程序错误,或者一些变量未初始化;

4、  onDestroy()是当一个Activity已经完成了自己的生命周期,最终退出调用的回调函数;

5、  当新的Activity被拉起时,都会在创建完成后再进行onStop()的调用;一般在onStop上进行一些资源的释放,在onResume()对必要的资源进行确认;

 

 

对于调用的顺序,可以写一个简单的Activity调用其他Activity的例子,同时在每个回调函数上,写上Log,则可以看到如下图的日志打印:

 

 先写这么多,以后再继续补充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值