标签:第一个 robot 异常 middle during star 一半 tac action
DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735
不像其他的编程模式那样应用是通过main()
函数启动的。Android系统通过调用特定的回调方法相应着特定的生命周期阶段,来初始化一个Activity
实例中的代码。有一系列的方法来启动一个activity,同一时候也有一系列的方法来销毁activity。
本课展示了大多数重要生命周期方法的预览,而且告诉你怎样处理第一个生命周期方法来创建一个新的activity实例。
在activity的一生中,系统依照类似金字塔的次序调用核心生命周期方法。就像这样,activity生命周期的每一个阶段就是金字塔的每一个台阶。当系统创建一个新的activity,每一个回调方法将activity的状态向顶端移动一步。金字塔的顶端相应着执行在应用前台的activity,这时用户可以与它交互。
当用户准备离开这个activity时,系统会调用另外一些方法来将activity的状态向金字塔下移动,从而销毁这个activity。在一些情况下,activity仅仅会向下移动一半然后等待(比如用户切换到其它的应用中)。这样这个activity就能够再次出现到顶部(假设用户回到这个activity)同一时候恢复用户离开时的状态。
因为这些的复杂性,你并不须要实现全部的生命周期方法。
然而,你要确保你的应用会像用户期待的那样表现。理解和实现每一个方法是十分重要的。适当地实现activity的生命周期方法能够通过几种方式来保证你的应用表现得非常好,包含以下几点:
你将会在接下来的课程中学到,activity像插图1那样在不同状态下切换有多种情况。然而,它们之中仅仅有三种状态是静态的。就像这样。activity能够在这三种状态之中的一个中保存一段较长时间:
在stopped过程中,activity实例以及它的全部状态信息比如成员变量都被保存起来了,可是它不能运行不论什么代码。
其它的状态(Created 和 Started)是瞬时状态,系统会在调用下一个生命周期方法来让此状态转移到下一个状态。就这样。当系统调用onCreate()
。它立即会调用onStart()
方法,他后面非常快被接着onResume()
方法。
上面就是主要的activity的生命周期方法。如今你将要開始学习一些特定的生命周期方法的行为。
当用户在设备主界面选择你的应用图标时。系统会调用onCreate()
方法,它是你声明作为应用启动Activity
中的方法。
它是一个作为进入应用UI的入口activity。
你能够在manifest中定义哪个activity作为应用启动的activity,在项目根文件夹下的AndroidManifest.xml
文件。
这个你应用的主activity必须在manifest 文件里声明<intent-filter>
元素,同一时候该元素要包括MAIN
action
和LAUNCHER
category。比如:
<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
而且已经声明好了这个filter。
假设在你的全部activity中,MAIN
action
或者 LAUNCHER
category
都没有被声明。那么你的应用的icon将不会出如今设备的主界面上。
大多数的应用都包括几个不同的activity。让用户运行同意用户运行不同的错啊做。无论这个activity是不是当点击应用图标时被创建的主activity还是响应用户操作开启的activity,系统都会通过调用它的onCreate()
方法为每一个activity创建实例。
你必须实现onCreate()
方法来运行主要的应用启动逻辑,这在应用的整个生命周期中仅仅会出现一次。比如,你对onCreate()
方法的实现中须要定义UI以及实例化一些可能存在的类变量。
比如,以下的 onCreate()
方法的样例展示了一些运行activity主要的启动代码,比如声明UI(在一个XML文件里被定义),定义成员变量。以及配置一些UI。
TextView mTextView; // Member variable for text view in the layout @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); // Make sure we‘re running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar // does not behave as a button ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }
注意: 使用SDK_INT
来阻止老系统运行新的APIs。
老版本号的系统运行新APIs将会导致一个运行时异常。
一旦onCreate()
结束运行。系统会非常快调用onStart()
方法和onResume()
方法。你的activity绝不会停留在Created或者Started状态下。从技术角度来看,当onStart()方法被调用时,这个activity对用户可见了,可是紧接着 onResume()
方法被调用后这个activity会一直保持在Resumed状态下,直到一些事情改变了它们,比如当来了一个电话时。用户导航到其它的activity上,或者设备的屏幕被关闭。
在接下来的课程里。你将会看到其他的方法,onStart()
和onResume()
在被用来resume来自Pasued或者Stopped状态下的activity是怎样起作用的。
提示: onCreate()
方法包括了一个被称为savedInstanceState
的參数,这个參数将会在后边的课程中介绍:Recreating
an Activity。
Activity的第一个回调方法是onCreate()
,它的最后一个回调方法是onDestroy()
。系统会在你的activity中调用这种方法最为结束信号,你的activity实例将会从系统内存中全然移除。
大多数的应用不须要实现这种方法,由于本地的类引用将会和activity一起被销毁,而且你的activity在onPause()
和onStop()
方法中须要执行大部分的清理工作。然而,假设你的activity包括在onCreate()方法中创建的后台线程或者其它长时间执行的资源,假设没有适当地关闭。那么你须要在onDestroy()
方法中销毁它们。
@Override public void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); }
提示: 系统在全部的情况下都会在运行完onPause()
和onStop()
后调用onDestroy()方法,除了一个例外:当你在onCreate()方法中调用了finish()
方法。这一些情况下,比如你的activity被用来做暂时的跳转,你须要在onCreate()方法中调用finish()
来销毁这个activity。
在这样的情况下,系统立马就运行了onDestroy()
方法。而没有运行其他不论什么生命周期方法。
Android学习路线(十二)Activity生命周期——启动一个Activity
标签:第一个 robot 异常 middle during star 一半 tac action
原文地址:http://www.cnblogs.com/wzjhoutai/p/7039658.html