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,应该交由系统统一管理生命周期。