Android Activity生命週期詳解
今天通過例項方法系統的看了一下activity的宣告週期。就是把整個過程的狀態log出來。或者通過對話方塊顯示出來。
原始碼貼出來:
注:另一個activity的程式碼沒有貼,大家隨便寫。注意activity的註冊
package com.yelbosh.test;
import com.yelbosh.test.classes.MyButton;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.support.v4.app.NavUtils;
import android.webkit.*;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private AlertDialog.Builder builder;
private int count=0;
private final String TAG = "log";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button)findViewById(R.id.button1);
builder = new AlertDialog.Builder(this);
builder.setMessage("你確定這麼做嗎親?").
/**
* 肯定的按鈕函式
*/
setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).
/**
* 否定的按鈕函式
*/
setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setMessage("OnCreate" + (count++));
builder.create().show();
Log.i(TAG,"oncreate");
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
/**
* 通過dialog的builder來構造視窗
*/
Intent intent = new Intent();
intent.setClass(MainActivity.this, SubActivity1.class);
startActivity(intent);
}
});
}
/**
* 當activity變得對使用者可見的時候被呼叫
*/
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
builder.setMessage("onStart" + (count++));
builder.create().show();
Log.i(TAG,"onstart");
}
/**
* 當activity變得對使用者不可見的時候被呼叫
*/
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
builder.setMessage("onStop" + (count++));
builder.create().show();
Log.i(TAG,"onstop");
}
/**
* 當介面準備和使用者互動的時候被呼叫
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
builder.setMessage("OnResume" + (count++));
builder.create().show();
Log.i(TAG,"onresume");
}
/**
* 當系統準備建立另一個螢幕的時候被呼叫
*/
@Override
protected void onPause(){
//TODO Auto-generated method stub
super.onPause();
builder.setMessage("onPause" + (count++));
builder.create().show();
Log.i(TAG,"onpause");
}
/**
* 當activity被銷燬的時候被呼叫
*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
builder.setMessage("onDestroy" + (count++));
builder.create().show();
Log.i(TAG,"ondestroy");
}
/**
* 當activity被再次呼叫的時候被呼叫
*/
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
builder.setMessage("onRestart" + (count++));
builder.create().show();
Log.i(TAG,"onrestart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
執行結果,除了logcat的整個過程之外,通過對話方塊也可以看出整個過程。
當程式的第一個activity開始和使用者互動之前,分別依次執行onCreate方法(建立activity),onStart方法(變得可見),onResume方法(開始互動)
然後這個時候點選跳轉的按鈕,會依次執行onPause方法(程式準備建立目標activity),onStop方法(先前的activity變得不可見),
這個時候已經跳轉到目標activity了,這個時候按下返回鍵,這個時候會呼叫先前的activity的onRestart方法(當重新返回這個activity的時候),然後onstart,onresume。
不過話又說回來了,目標activity的建立過程是在什麼時候建立的呢?由於先前的onPause方法是在準備建立目標activity之前呼叫的,所以我們猜測onCreate方法是在onPause方法之後呼叫的。那麼其他方法呢?還是log出來吧,log出來之後,發現目標activity的onresume方法(包括onResume)之前的過程都是在原先的activity的onPause和onStop方法之間呼叫的,這也意味著,當目標activity建立完畢並且準備和使用者互動的時候,先前的activity才會變得不可見。
至此,我們的理解確實又上了一個層次了
原始碼貼出來:
注:另一個activity的程式碼沒有貼,大家隨便寫。注意activity的註冊
package com.yelbosh.test;
import com.yelbosh.test.classes.MyButton;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.support.v4.app.NavUtils;
import android.webkit.*;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private AlertDialog.Builder builder;
private int count=0;
private final String TAG = "log";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button)findViewById(R.id.button1);
builder = new AlertDialog.Builder(this);
builder.setMessage("你確定這麼做嗎親?").
/**
* 肯定的按鈕函式
*/
setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).
/**
* 否定的按鈕函式
*/
setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setMessage("OnCreate" + (count++));
builder.create().show();
Log.i(TAG,"oncreate");
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
/**
* 通過dialog的builder來構造視窗
*/
Intent intent = new Intent();
intent.setClass(MainActivity.this, SubActivity1.class);
startActivity(intent);
}
});
}
/**
* 當activity變得對使用者可見的時候被呼叫
*/
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
builder.setMessage("onStart" + (count++));
builder.create().show();
Log.i(TAG,"onstart");
}
/**
* 當activity變得對使用者不可見的時候被呼叫
*/
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
builder.setMessage("onStop" + (count++));
builder.create().show();
Log.i(TAG,"onstop");
}
/**
* 當介面準備和使用者互動的時候被呼叫
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
builder.setMessage("OnResume" + (count++));
builder.create().show();
Log.i(TAG,"onresume");
}
/**
* 當系統準備建立另一個螢幕的時候被呼叫
*/
@Override
protected void onPause(){
//TODO Auto-generated method stub
super.onPause();
builder.setMessage("onPause" + (count++));
builder.create().show();
Log.i(TAG,"onpause");
}
/**
* 當activity被銷燬的時候被呼叫
*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
builder.setMessage("onDestroy" + (count++));
builder.create().show();
Log.i(TAG,"ondestroy");
}
/**
* 當activity被再次呼叫的時候被呼叫
*/
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
builder.setMessage("onRestart" + (count++));
builder.create().show();
Log.i(TAG,"onrestart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
執行結果,除了logcat的整個過程之外,通過對話方塊也可以看出整個過程。
當程式的第一個activity開始和使用者互動之前,分別依次執行onCreate方法(建立activity),onStart方法(變得可見),onResume方法(開始互動)
然後這個時候點選跳轉的按鈕,會依次執行onPause方法(程式準備建立目標activity),onStop方法(先前的activity變得不可見),
這個時候已經跳轉到目標activity了,這個時候按下返回鍵,這個時候會呼叫先前的activity的onRestart方法(當重新返回這個activity的時候),然後onstart,onresume。
不過話又說回來了,目標activity的建立過程是在什麼時候建立的呢?由於先前的onPause方法是在準備建立目標activity之前呼叫的,所以我們猜測onCreate方法是在onPause方法之後呼叫的。那麼其他方法呢?還是log出來吧,log出來之後,發現目標activity的onresume方法(包括onResume)之前的過程都是在原先的activity的onPause和onStop方法之間呼叫的,這也意味著,當目標activity建立完畢並且準備和使用者互動的時候,先前的activity才會變得不可見。
至此,我們的理解確實又上了一個層次了
相關文章
- Android Activity生命週期Android
- Android Activity的生命週期和啟動模式詳解Android模式
- [Android]Activity的生命週期Android
- Activity生命週期
- Android 元件系列-----Activity生命週期Android元件
- Activity的生命週期和啟動模式詳解模式
- Android全面解析之Activity生命週期Android
- Activity生命週期onDestroy
- Android View的生命週期詳解AndroidView
- View生命週期與Activity生命週期的關係View
- android解鎖屏時Activity生命週期的變化Android
- Android Activity生命週期的一點感悟Android
- Android 之 Activity 生命週期淺析(一)Android
- 初識Android之Activity的生命週期Android
- Android四大元件——Activity——Activity的生命週期Android元件
- Activity生命週期總結
- vue生命週期詳解Vue
- React生命週期詳解React
- 詳解vue生命週期Vue
- Service生命週期詳解
- Activity 知識梳理(1) Activity生命週期
- 擼擼Android的羊毛(二)----Activity生命週期Android
- Android 之 Activity 生命週期的淺析(二)Android
- 深入學習Activity生命週期
- activity的生命週期(總結)
- View和Activity的生命週期View
- Activity簡介及生命週期
- Android生命週期元件Lifecycle使用詳解Android元件
- 詳解Vue生命週期【上】Vue
- React 元件生命週期詳解React元件
- React元件生命週期詳解React元件
- Android | Activity和Fragment最全生命週期+發現大牛AndroidFragment
- Android入門教程之Activity(生命週期,啟動...)Android
- Android 基礎 -- Activity 生命週期實踐總結Android
- Android學習筆記04——Activity的生命週期Android筆記
- Activity生命週期與啟動模式模式
- Activity生命週期深入理解2
- 關於activity的生命週期1