Android學習筆記04——Activity的生命週期
下面是google官方給出的android生命週期圖:
OnCreate():當Activity第一次建立的時候
OnStart():activity變為在螢幕上對使用者可見時呼叫。當Activity能被使用者看到時呼叫OnStarte()方法(Called when the activity is becoming visible to the user. )
OResume():activity開始與使用者互動時呼叫(無論是啟動還是重新啟動一個活動,該方法總是被呼叫的)
OnPause():當Activity被其他Activity遮擋時呼叫此方法,即activity被暫停或收回cpu和其他資源時呼叫,該方法用於儲存活動狀態的,也是保護現場,壓棧。
OnStop():activity被停止並轉為不可見階段及後續的生命週期事件時呼叫。
OnRestart():重新啟動activity時呼叫。該活動仍在棧中,而不是啟動新的活動
OnDestroy():activity被完全從系統記憶體中移除時呼叫
注:這些方法都是OS自行呼叫的。
演示效果:
相關程式碼:
FirstActivity.java
package mars.activity04;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class FirstActivity extends Activity {
/** Called when the activity is first created. */
private Button myButton;
//下面覆寫了這7個生命週期的相關方法,並用System.out輸出動態顯示。
@Override
public void onCreate(Bundle savedInstanceState) {
System.out.println("FirstAcvity ---> onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button)findViewById(R.id.myButton);
myButton.setText("啟動第二個Activity");
myButton.setOnClickListener(new ButtonOnClickListener());
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onDestory");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onPause");
super.onPause();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onRestart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onResume");
super.onResume();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onStart");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
System.out.println("FirstAcvity --->onStop");
super.onStop();
}
class ButtonOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(FirstActivity.this,SecondActivity.class);
FirstActivity.this.startActivity(intent); //啟動第二個Activity
}
}
}
secondActivity.javapackage mars.activity04;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onCreate");
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onDestory");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onPause");
super.onPause();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onRestart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onResume");
super.onResume();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onStart");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
System.out.println("SecondActivity--->onStop");
super.onStop();
}
}
點選第一個Activity按鈕時進入第二個Activity,再按返回鍵返回到第一個Activity時執行的相關操作:
由圖可以看出,每啟動一個新的Activity都會呼叫3個方法(注:是OS呼叫的,不是手動寫的):
OnCreat(); //生成新的Activity時
OnStart(); //能被使用者看到時
OnResume(); //能獲得焦點的時候,也就是能點選按鈕,文字框時。
OnDestroy被呼叫的時機:
1、Activity主動銷燬時
2、明確寫出了Activity的finish方法時。
3、當android系統資源不夠用時,會將優先順序較低的Activity銷燬掉。
Activity與Task
Android系統中Activity作為Activity棧(Stack)被管理的,大家都知道棧的特點是先進後出,所以當前活動的Activity處於棧頂,之前非活動的Activity被壓入棧底,等待是否可能被恢復為活動狀態。
Task就是一個棧,用於盛放各種Activity。
注意SecondActivity.this.finish();這句程式碼,會將SecondActivity從棧中踢出去,從而你在顯示ThirdActivity,點選返回按鈕時,會直接跳到FirstActivity去了。
當有對話方塊時,主Activity不會執行OnStop方法。
Activity能否被Kill掉?
在手機資源有限的情況下,作業系統會自動關閉某些Acitviy,說明這些Activity可以被killed掉。當一些Activity執行某些生命函式時,可以被殺掉。
Method |
Killable? |
Next |
||
No |
onStart() |
|||
|
No |
onStart() |
||
No |
onResume() oronStop() |
|||
|
No |
onPause() |
||
Pre-HONEYCOMB |
onResume()or |
|||
Yes |
onRestart()or |
|||
Yes |
nothing |
貝海拾遺:
1.設定過濾器的方法:
切換到DDMS檢視(右上角),在logcat裡點選“+”,在By log tag裡設定需要過濾出的資訊。
2.eclipse將專案從jdk 1.5版本升為jdk1.6版本的方法:
Project->Properties->Java Compiler->Configure Workspace Setting,在彈出的頁面中進行設定,將JDK由1.5改為1.6,重新編譯後即可執行了。
3.對話方塊的配置:
程式碼很簡單,與其他控制元件設定一樣,只不過在AndroidMainfest.xml裡插入以下程式碼即可
<activity android:name="***"
android:label="***"
android:theme="@android:style/theme.Dialog"/>
相關文章
- 《Android藝術開發探索》學習筆記之Activity的生命週期Android筆記
- 深入學習Activity生命週期
- [Android]Activity的生命週期Android
- React生命週期學習筆記React筆記
- Android Activity生命週期Android
- Activity生命週期與啟動模式筆記模式筆記
- Vue學習筆記(2)—— Vue的生命週期Vue筆記
- Activity生命週期
- Android 元件系列-----Activity生命週期Android元件
- Android Activity生命週期詳解Android
- ReactNative學習筆記五之生命週期React筆記
- Android Activity生命週期的一點感悟Android
- 初識Android之Activity的生命週期Android
- View生命週期與Activity生命週期的關係View
- Android全面解析之Activity生命週期Android
- Android四大元件——Activity——Activity的生命週期Android元件
- Activity生命週期onDestroy
- android基礎學習-android篇day17-Activity的生命週期(轉)Android
- react-native學習筆記之 生命週期React筆記
- 擼擼Android的羊毛(二)----Activity生命週期Android
- Android 之 Activity 生命週期的淺析(二)Android
- activity的生命週期(總結)
- View和Activity的生命週期View
- Android 之 Activity 生命週期淺析(一)Android
- Activity生命週期總結
- react生命週期筆記React筆記
- Fragment生命週期筆記Fragment筆記
- 信管筆記-- 生命週期筆記
- Activity 知識梳理(1) Activity生命週期
- 關於activity的生命週期1
- activity生命週期的onPause和onStop
- iOS初級開發學習筆記:APP生命週期的學習總結iOS筆記APP
- 學習vue生命週期Vue
- Activity簡介及生命週期
- Android Activity是如何啟動的?Activity的生命週期是如何呼叫的?Android
- Spring學習筆記二: Bean裝配及生命週期Spring筆記Bean
- JSP筆記-生命週期JS筆記
- React筆記(元件生命週期)React筆記元件