Activity
注:生命週期的狀態切換隻存在於activity內部對象之間。
1、 是應用程序的入口
2、 負責創建窗口,用戶交互等
3、 一個程序可能有多個activity
使用方法:繼承自android.app.Activity
Override onCreate()
setContentView()顯示視圖
findViewByld()實例化組件
androidManifest.xml—>application標籤裏聲明
指定程序運行時首先家在的Activity,定義action和category
Activity的生命週期
Activity有三種狀態,分別爲:
運行狀態:當activity在屏幕的最前端(位於當前堆棧的頂部)它是可見的有焦點的,可以用力進行用戶的操作(點擊,雙擊,長按等),那麼就叫做激活或者運行狀態。值得注意的是,當activity處於運行狀態的時候,android會儘可能的保持它的運行,即使出現內存不足等情況,android也會先殺死堆棧底部的activity,來確保運行狀態的activity正常運行。
暫停狀態:在某種情況下,activity對用戶來說,仍然是可見的,但不再擁有焦點,即用戶對它的操作是沒有實際意義的。在這個時候它就屬於暫停狀態。例如:當最前端的activity是個透明或者美歐全屏,那麼下層仍然可見的activity就是暫停狀態。暫停的activity仍然是激活的(它保留所有的狀態和成員信息並保持與activity管理器連接),但當內存不足時,可能會被殺死。
注:不是所有的activity失去焦點就會進入暫停狀態。
停止狀態:當activity完全不可見時,它就處於停止狀態。它仍然保留着當前狀態和成員信息。然而這些對用戶來說,都是不可見的;同暫停狀態一樣,當系統其他地方需要內存時,它也有被殺死的可能。
生命週期事件:activity狀態的變化是人爲操作的,而這些狀態的改變,也會觸發一些事件。我們且叫他的生命週期事件一共有七個。如圖:
Void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
當打開一個activity,如果該activity實例不存在於activity管理器中,就會觸發onCreate事件。Activity的實例不是我們自己創建的。是android系統自己創建的。接下來是onStart事件,然後是onResume事件,此時activity就處於了運行狀態。
接下來看看在各種情況下的狀態轉換:
第一:
1、運行activity之後的狀態轉換:
package cn.lyhz;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class TestActivity extends Activity {
private static final String TAG = "myTest";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG,"onCreate");
}
protected void onDestroy() {
//Log.i(TAG,"onDestroy");
super.onDestroy();
}
protected void onPause() {
Log.i(TAG,"onPasume");
super.onPause();
}
protected void onRestart() {
Log.i(TAG,"onRestart");
super.onRestart();
}
protected void onResume() {
Log.i(TAG,"onResume");
super.onResume();
}
protected void onStart() {
Log.i(TAG,"onstrat");
super.onStart();
}
protected void onStop() {
Log.i(TAG,"onStop");
super.onStop();
}
}
2、點擊紅色圈住得那個按鈕(返回鍵),會發生的狀態是
onPasume—onStop—onDestroy
一般不會發生onDestroy事件,除非是有意的把一個activity關閉,Destroy之後是無法再返回的。
點擊小房子後,運行的狀態爲onPesume—onStop,這是壓棧的過程
返回之後再長按home鍵(小房子)重新回到activity,它的運行狀態是onRestart—onStart—onResume,也就是出棧的過程。
第二:
寫兩個activity互相切換
package cn.lyhz;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.seconde);
Button backB = (Button)findViewById(R.id.backB);
backB.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this,FirstActivity.class);
startActivity(intent);
}
});
}
}
點擊按鈕,運行組狀態是onPasume—onStop會切換到另一個界面。
點擊返回按鈕,它的運行狀態是onCreate—onStart—onResume,點擊手機自帶的返回按鈕的運行狀態是
onRstart—onStart—onResume(這是出棧的過程)
第三:(半透明定的效果,創建了一個對話框樣式activity)
點擊this is maDialog按鈕就會出現這個結果,這是的狀態爲onPesume暫停狀態,這是把它放到了棧裏面。再點擊手機自帶的返回按鈕,他回出棧,狀態爲onResume
2、package cn.lyhz;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class FirstActivity extends Activity {
private static final String TAG = "myTest";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG,"onCreate");
Button goB = (Button)findViewById(R.id.goB);
goB.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
Button showMyDialog = (Button)findViewById(R.id.showMyDialog);
showMyDialog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,DialogActivity.class);
startActivity(intent);
}
});
Button showAlertDialogB = (Button)findViewById(R.id.showAlertDialog);
showAlertDialogB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showAlertDialog();
Log.i(TAG,"showAlertDialog");
}
});
}
public void showAlertDialog(){
AlertDialog.Builder builder = new Builder(FirstActivity.this);
builder.setMessage("確認退出麼?");
builder.setTitle("提示");
builder.setPositiveButton("確定",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
FirstActivity.this.finish();
}
});
builder.setNegativeButton("
取消", new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
protected void onDestroy() {
Log.i(TAG,"onDestroy");
super.onDestroy();
}
protected void onPause() {
Log.i(TAG,"onPasume");
super.onPause();
}
protected void onRestart() {
Log.i(TAG,"onRestart");
super.onRestart();
}
protected void onResume() {
Log.i(TAG,"onResume");
super.onResume();
}
protected void onStart() {
Log.i(TAG,"onstrat");
super.onStart();
}
protected void onStop() {
Log.i(TAG,"onStop");
super.onStop();
}
}
創建的真正的對話框點擊取消是沒有任何反應的(不能觸發FirstActivity的狀態),而點擊確定狀態是onPesume—onStop—onDestroy