Android应用程序四大组件之Activity入门

Activity简介
        Activity组件是用户能够与之交互的部分,每一个Activity组件都必须在AndroidManifest.xml文件里的<application>元素中用<activity>进行声明,<activity>元素有很多属性,必须含有的属性是android:name,表示这个Activity类的名字。

Activity的启动与被启动
        我们知道,在Android中,应用程序可以通过Intent对象启动其它应用程序的组件,那么被启动的组件是如何接收到这个消息的呢?没错,这就是<activity>里的<intent-filter>元素的作用啦,不管这个组件是主动启动还是被动启动,都是通过<intent-filter>来实现的。每个应用程序都有一个主动启动的主入口,在主入口的<activity>中声明即可:
<intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
当然,如果你不希望你的组件被其它应用程序启动,就不需要声明<intent-filter>了,在自己的应用程序中可以用显式的Intent启动,如下代码所示:
Intent intent = new Intent(this, ActivityToBeActivated.class);
startActivity(intent);
如果你的应用程序要启动其它应用程序的组件并有返回结果(如获取联系人信息),可以用startActivityForResult(Intent intent, int requestCode)方法,并重写onActivityResult(int requestCode, int resultCode, Intent data)方法,data里就存有返回的结果。

Activity的关闭
        要关闭当前的Activity,只需调用该Activity的finish()方法,也可以用finishActivity(int requestCode)来关闭通过startActivityForResult(Intent intent, int requestCode)启动的Activity。大部分情况下你都不需要自己关闭Activity,系统会自动管理。

Activity的生命周期
       Activity的整个生命周期包括三个状态:

  • 运行状态(Resumed):用户看得到并且可以与之交互。
  • 暂停状态(Paused):用户看得到但不可以与之交互,比如弹出一个对话框时后面的那个变得有点透明的Activity,这时Activity还算活着(存在于内存中,包括状态和成员变量和成员函数等,仍与窗口管理器绑定),但在系统内存极低的情况下还是有可能被杀掉的。
  • 停止状态(Stopped):用户看不到也不可以与之交互,这时Activity也还活着,但也活不久了(与暂停状态一样存在于内存中,但不与窗口管理器绑定),系统随时都可能杀掉它以释放内存资源。

       与Activity生命周期相关的七个函数:

  • onCreate(Bundle savedInstanceState):完整生命周期开始,当Activity刚被创建时被调用,应该在这里进行初始化(定义布局、初始化全局变量、创建新线程等)。
    • onRestart():当Activity进入停止状态后又重新启动时会被调用。
    • onStart():可见生命周期开始,在用户看到Activity前调用。
      • onResume():前台生命周期开始,在开始跟用户交互前调用,在整个生命周期中,前台生命周期是切换得比较频繁的,为了用户体验,这部分应该尽量精简。
      • onPause():前台生命周期结束,当要启动其它Activity前调用,应该在这里保存数据(因为之后Activity都可能被杀掉)和停止动画等比较消耗CPU的功能,而且这个函数应该尽快结束(因为在这个函数结束前用户都看不到被用户启动的其它Activity)。
    • onStop():可见生命周期结束,在Activity对用户不可见时调用。
  • onDestroy():完整生命周期结束,应该在这里释放资源(释放内存、关闭线程等)。

       关于Activity的完整的生命周期,引用官网的一张图片来说明:
Activity状态的恢复
        注意到与生命周期相关的七个函数中,只有一个是带有参数的,对了,就是onCreate(Bundle savedInstanceState),这个参数是一个Bundle对象,那么这个参数是干什么用的呢?这个参数就是用来恢复Activity状态信息的,在Activity的整个生命周期中,用户可能会启动其它Activity,然后原来的Activity就会进入停止状态,而在这个状态下Activity是有可能被系统杀掉的,如果用户这时回到原来的Activity时,用户期待原来的Activity还是他启动其它Activity前的状态,这就涉及到Activity状态的恢复啦。
        说到恢复状态信息,那当然在这之前要有一个保存状态信息的过程(不然哪来的数据呢),可以重写onSaveInstanceState(Bundle outState)方法来实现这一功能,这里的outState就是你用来保存状态的和恢复状态时传给onCreate(Bundle savedInstanceState)方法的savedInstanceState对象。默认的onSaveInstanceState(Bundle outState)会调用布局里的每一个拥有ID的View对象的onSaveInstanceState()方法,以保存每一个View对象的状态,这里要注意一点,只有拥有android:id属性的View对象的状态才会被保存。还有,系统并不保证onSaveInstanceState(Bundle outState)方法一定会被调用(比如用户主动关闭该Activity),如果被调用,那就一定是在onStop()之前,也有可能在onPause()之前。
        测试你的应用程序有没有实现好状态恢复的一个好方法是旋转屏幕,当屏幕方向改变时,系统会杀掉当前的Activity后又重新启动。
        关于Activity的状态的恢复,同样用官网的一张图片说明:
Activity的切换
       当在Activity A中启动Activity B,整个流程如下:

  • 调用A的onPause()
  • 调用B的onCreate()、onStart()、onResume()
  • 调用A的onStop()

       所以有什么数据需要保存的话,应该在A的onPause()中实现。


Demo下载地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值