当用户开始离开活动,系统调用移动的活动状态回落金字塔,以便拆除活性的其他方法。在一些情况下,活动将仅移动一部分的方式向下金字塔和等待,从该点,活动可以移回到顶部(当用户切换到另一个应用程序例如)(如果用户返回到活动)和恢复当用户离开。
图1.活动周期的简化插图,表示为步骤金字塔。这表明如何,对于用于拍摄活动向已恢复状态的一个步骤上方逢回调,有一个回调方法,它的活性下台。该活动还可以从暂停和停止状态返回到恢复状态。
根据你的活动的复杂性,你可能并不需要实现所有的生命周期方法。然而,重要的是你了解每一个和实施那些确保您的应用程序的行为的用户所期望的方式很重要。实现你的活动的生命周期方法得当,确保您的应用程序的行为以及在几个方面,包括它:
如果用户收到一个电话或在使用你的应用程序切换到另一个应用程序不会崩溃。
不消耗宝贵的系统资源,当用户不积极地使用它。
不失去用户的进度,如果他们离开你的应用程序,并返回到它在稍后的时间。
不会崩溃或失去用户的进度,当屏幕在横向和纵向之间旋转。
当您将了解到以下的课程,有几个situtations在被如图1所示的不同状态之间的活动转换然而,只有这三个国家的可以是静态的。即,活性可以只在三个用于在延长的时间周期状态之一存在:
恢复
在这种状态下,活动是在前台,并且用户可以与其进行交互。 (有时也被称为“运行”状态)。
暂停
在这种状态下,活动部分是由另一活性的其他活动这是在前景是半透明的或不覆盖整个屏幕遮蔽。暂停活动不接收用户输入并不能执行任何代码。
停止
在这种状态下,活动是完全隐藏和不可见的用户;它被认为是在背景中。虽然停止,活动实例及其所有状态信息,如成员变量被保留,但不能执行任何代码。
其他国家(创建和启动)是短暂的,系统将迅速从他们移动到下一个状态,通过调用下一个生命周期回调方法。也就是说,系统调用的onCreate()后,它很快调用ONSTART(),这是紧接着onResume()。
这是它的基本活动的生命周期。现在,您将开始学习一些具体的生命周期行为。
指定应用程序的启动活动
当用户从主屏幕中的应用程序图标时,系统调用的onCreate()方法的活动在您的应用程序,你已经宣布为“启动器”(或“主”)的活动。这是作为主入口点到你的应用程序的用户界面的活动。
您可以定义为在Android清单文件的主要活动要使用的活动 AndroidManifest.xml
这是你的项目的根目录下 <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项目,默认的项目文件包括在清单此过滤器的声明的Activity类。
如果通过MAIN或 LAUNCHER启动程序类别为您的活动之一,没有声明,那么你的应用程序图标将不会出现在应用程序的主屏幕上的列表中。
创建一个新实例
您必须实现onCreate()方法来执行,应该对活动的整个生命周期只发生一次基本的应用程序的启动逻辑。例如,你的执行onCreate(中)应该定义用户界面,并可能实例化一些类范围内的变量。
例如,所述的onCreate()方法的以下示例说明一些代码,执行一些基本设置为活动,如宣告用户界面(在XML布局文件中定义),限定部件变量以及配置一些UI的。
TextView mTextView; //在布局文本视图成员变量 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置用户界面布局参见活动 //布局文件在项目RES /布局/ main_activity.xml文件中定义 setContentView(R.layout.main_activity); //初始化成员TextView的,所以我们可以在以后对其进行操作 mTextView = (TextView) findViewById(R.id.text_message); //确保我们在蜂窝运行或更高版本使用动作条的API if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { //为主要活动,使操作栏中确保应用程序图标 //不表现为一个按钮 ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }注意:使用SDK_INT以防止旧的系统从Android 2.0的(API级别5),只有更高这样执行新的API的作品。旧版本会遇到一个运行时异常。
一旦的onCreate()执行完毕,系统调用快速连续的ONSTART()和onResume()方法。您的活动从来没有驻留在创建或启动状态。技术上,活性变得对用户可见时ONSTART()被调用,但onResume()迅速如下,活性保持在续状态,直到某事发生改变的是,在接收电话呼叫时,例如,用户导航到另一项活动,或在设备屏幕关闭。
在后面的其他课程,你会看到其他启动方法,ONSTART()和onResume(),使用时从暂停或停止状态恢复的活动是你活动的整个生命周期过程中非常有用。
注:的onCreate()方法包含了一个名为savedInstanceState参数在有关重新生成一个Activity(活动)后的教训进行讨论。
(ondestroy)销毁活动
该项活动的第一个生命周期回调的onCreate(),其最后的回调的onDestroy()。该系统调用您的活动作为最后的信号,你的活动实例被完全从系统内存中删除此方法。
大多数应用程序并不需要实现这个方法,因为本地类引用被破坏的活动,您的活动应该在onPause()和onStop()执行大多数清理。但是, 如果你的活动包括您的onCreate()或其他长期运行的资源可能泄漏内存,如果没有正确关闭过程中创建的后台线程,你应该在的onDestroy杀死他们()
@Override public void onDestroy() { super.onDestroy(); //总是调用超 //停止方法跟踪该活动的onCreate时开始() android.os.Debug.stopMethodTracing(); }注:该系统调用的onDestroy()后,它已被称为的onPause()和的onStop()中除一人外的所有情况:当你调用从的onCreate()方法中finish()。在某些情况下,比如当你的活动作为一个临时的决策者推出另一项活动,您可以调用内的onCreate()完成()的破坏活动。在这种情况下,系统立即调用的onDestroy(),而不调用任何其他生命周期方法。