编写:kesenhoo - 原文:http://developer.android.com/training/basics/activity-lifecycle/starting.html
不像其他编程范式一样:程序从main()
方法开始启动。Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码。系统存在启动与销毁一个activity的一套有序的回调函数。
本节课会介绍那些生命周期中最重要的回调函数,并演示如何处理启动一个activity所涉及到的回调函数。
Figure 1. 下面这张图讲解了activity的生命周期:(这个金字塔模型要比之前Dev Guide里面的生命周期图更加容易理解,更加形象)
MAIN
action 与 LAUNCHER
category 的<intent-filter>
标签来声明。例如:<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>
Note:当你使用Android SDK工具来创建Android工程时,工程中就包含了一个默认的声明有这个filter的activity类。
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);
}
}
Caution: Using the SDK_INT to prevent older systems from executing new APIs works in this way on Android 2.0 (API level 5) and higher only. Older versions will encounter a runtime exception.
Note: onCreate() 方法包含了一个参数叫做savedInstanceState,这将会在后面的课程 - 重新创建activity的时候涉及到。
@Override
public void onDestroy() {
super.onDestroy(); // Always call the superclass
// Stop method tracing that the activity started during onCreate()
android.os.Debug.stopMethodTracing();
}
Note: 系统通常是在执行了onPause()与onStop() 之后再调用onDestroy() ,除非你的程序在onCreate()方法里面就调用了finish()方法,。在某些情况下,例如你的activity只是做了一个临时的逻辑跳转的功能,它只是用来决定跳转到哪一个activity,这样的话,你需要在onCreate里面去调用finish方法,这样系统会直接就调用onDestory方法,其它生命周期的方法则不会被执行。