歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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才會變得不可見。

至此,我們的理解確實又上了一個層次了

Copyright © Linux教程網 All Rights Reserved