大多数项目编程规范是通过一个method()方法来启动一个app,Android系统却不是如此,它是在一个Activity中开始代码,并且是通过援引与activity具体生命阶段相一致的具体回调方法来开始Activity代码的。有一系列回调方法用于开始运行一个activity,还有一系列回调方法用于销毁一个activity。
这一课提供最重要的生命周期的方法的概观,并且展示如何处理第一个生命周期的回调以便创建你的第一个activity实例。
了解生命周期的回调
--------------------------------------------------
在一个activity的生命中,系统会回调一组核心的生命周期方法,类似于阶梯金字塔。activity每一个生命周期的阶段,就像金字塔上每一个分开的一步。当系统创建一个新的activity实例时,每一个回调方法都向金字塔的顶部挪动一步。而这个金字塔的顶部就是这个activity运行在前景并且能和用户交互的那一个状态点。
当用户开始要离开这个activity时,系统又会调用其他的方法就像在将activity状态往金字塔的底部一步步挪动,以便销毁这个activity。在某些情况下,一个activity只向金字塔的底部挪动一部分并且等待着(比如用户切换到另一个app)重新回到顶部(如果用户又回到当前activity)在用户离开的地方重新开始。
图1.这是一个简化的Activity生命周期的图解,表示为一个阶梯金字塔。它展示了如何调用每一步,使activity达到顶部的激活运行状态(Resumed),以及如何回调每一个方法使activity从顶部下来。activity也可以从暂停状态(Paused)和停止状态(Stopped状态回到激活运行状态(Resumed)。
根据你的activity的复杂度,你很可能不需要把所有的生命周期方法都继承一遍。但是你很有必要理解他们每一个方法并且会使用他们完成客户所期望的activity动作。继承activity生命周期方法能很好地保证你的app在以下几种方式下表现的更完美,包括:
- 在用户使用你的app时突然接到电话或者切换到其他app时,你的app不会关闭。
- 当用户不需要的时候不回消耗宝贵的系统资源。
- 当用户暂时离开你的app后又回来时不回丢失用户应用进展。
- 当屏幕在横纵向之间转换时不会关闭程序或丢失用户应用进展。
Resumed(激活运行状态):这这种状态下,activity处在前景,并且可以和用户交互。(有时也被叫做运行状态。)
Paused(暂停状态):在这种状态下,activity一般是被另一个activity覆盖了,这个在前景的activity(只能)是半透明的,或者是不充满整个屏幕。暂停的activity不能收到用户的输入,也不能执行任何代码。
Stopped(停止状态):在这种状态下,activity被完全隐藏对用户不可见;一般被认为它在背景。当被停止,这个activity实例以及它的所有状态信息,像成员变量仍然存在,但是不能执行任何代码。
其他的状态(Created和Started)是临时的,系统会通过调用下一步生命周期回调方法快速从这些状态移动到下一个状态。就是说,当系统调用过onCreate()方法后,很快就调用onStart()方法,紧接着很快又会调用onResume()方法,进入Resumed状态。
以上就是基本的activity生命周期。现在,你就要开始学习一些关于具体生命周期的动作啦。
指定你的App启动时默认调用的Activity(App首页)
---------------------------------------------------------------------------------------------------------
当用户在主屏幕上点击你的app的图标按钮时,系统会调用你为你的app设置的默认启动(或者主)的Activity的onCreate()方法。那么这个默认启动的Activity就会在用户点击app图标按钮时创建实例,显示在用户的面前。你可以在Android manifest文件中设置你想要的任意一个activity作为app默认启动的(也就是主的)activity,只需要在项目根目录下的AndroidManifest.xml文件中修改即可。
主activity必须在manifest的<intent-filter>中声明,<intent-filter>中定义了MAIN 动作和LAUNCHER 类别。举例如下:
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>注意:当你用Android SDK工具新建一个Android项目时,自动生成的默认项目文件本身就已经包括了一个已经在manifest声明过的Activity类,所以新建完一个Android项目后立马就可以运行出效果。
如果你所有的activity都没有声明副哦MAIN动作或者LAUNCHER类别,那么你的app图标按钮将不会出现在主屏幕的app列表中。
创建一个新的实例
--------------------------------------
大多数的app都包括几个不同的activity以便于用户进行不同的操作。无论是用户点击app图标按钮创建的主activity还是其他响应用户操作产生的activity,系统都要通过调用它的onCreate()方法创建每一个新的实例。
未完,明日待续。。。。。