Activity是UI组件。一个应用通常包含多个Actvity,每个Activity都提供一个窗口用于与用户交互。每个应用会有一个作为“主”Activity的Activity,该Activity会在启动应用时显示,通过它可以启动其他Activity。当新的Activity启动时,前一个Activity会停止,并且新的Activity会被压入到“Back”栈中,获得用户焦点。"Back"栈保持了“后进新出”的特性,当用户按Back键时,当前的这个Activity出栈,前一个Activity重新恢复。
在Activity的生命周期中会有6个回调方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()。
创建Activity
创建必须自己的Activity必须继承Activity,并且覆盖Activity的生命周期方法。其中最重要的两个重要方法是:onCreate()、onPause()。
onCreate():
系统在创建Activity时回调该方法。必须覆盖该方法,在该方法中应该用于初始化必要的组件,调用setContentView()定义用户界面。
onPause():
用户离开当前Activity时,系统调用该方法。在该方法中应该用于保存数据修改。
下面举个例子:
package org.wh.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast.makeText(this, R.string.hello, Toast.LENGTH_LONG).show();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
编写完Activity后,需要在AndroidManifest.xml中进行配置:
<activity
android:label="@string/app_name"
android:name=".HelloWorldActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<action>元素指定该Activity是应用程序的“主”入口。<category>元素指定该Activity会在系统的应用启动器中显示。
启动Activity
可以通过startActivity()启动另一个Activity:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.start);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
startActivity(intent);
}
});
}
启动带返回值的Activity:
public class StartActivityForResultActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.start);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
intent.putExtra("name", "Hello AnotherActivity!");
startActivityForResult(intent, 100);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 200) {
String result = data.getStringExtra("name");
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}
}
}
在另一个Activity中:
public class AnotherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.another);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
Button btn = (Button)findViewById(R.id.returnResult);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent result = new Intent();
result.putExtra("name", "Hello StartActivity!");
setResult(200, result);
finish();
}
});
}
}
关闭Activity
调用finish()和finishActivity()。通常不应该显示的通过这两个方法关闭Activity,应该交由系统统一管理生命周期。