Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自學筆記-15-Activity的生命周期

Android自學筆記-15-Activity的生命周期

編輯:關於Android編程

很長時間沒有寫博客了,懶了,感慨一下。

Activity的生命周期主要就是一張下面的圖:

/

下面通過代碼簡單的介紹一下,具體的一些內容看代碼的注釋:

package com.mxy;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

/**
 * http://blog.csdn.net/liuhe688/article/details/6733407
1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後台:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
 * @author mxy
 *
 */

public class MainActivity extends Activity {

    
    private static final String TAG = mxy;  
    private Context context = this;  
    private int param = 1;  
      
    //Activity創建時被調用  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        Log.i(TAG, onCreate called.);  
          
        setContentView(R.layout.activity_main);  
          
        Button btn = (Button) findViewById(R.id.btn);  
        btn.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                Intent intent = new Intent(context, TargetActivity.class);  
                startActivity(intent);  
            }  
        });  
    }  
      
    //Activity創建或者從後台重新回到前台時被調用  
    @Override  
    protected void onStart() {  
        super.onStart();  
        Log.i(TAG, onStart called.);  
    }  
      
    //Activity從後台重新回到前台時被調用  
    @Override  
    protected void onRestart() {  
        super.onRestart();  
        Log.i(TAG, onRestart called.);  
    }  
      
    //Activity創建或者從被覆蓋、後台重新回到前台時被調用  
    @Override  
    protected void onResume() {  
        super.onResume();  
        Log.i(TAG, onResume called.);  
    }  
      
    //Activity窗口獲得或失去焦點時被調用,在onResume之後或onPause之後  
    /*@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
        super.onWindowFocusChanged(hasFocus); 
        Log.i(TAG, onWindowFocusChanged called.); 
    }*/  
      
    //Activity被覆蓋到下面或者鎖屏時被調用  
    @Override  
    protected void onPause() {  
        super.onPause();  
        Log.i(TAG, onPause called.);  
        //有可能在執行完onPause或onStop後,系統資源緊張將Activity殺死,所以有必要在此保存持久數據  
    }  
      
    //退出當前Activity或者跳轉到新Activity時被調用  
    @Override  
    protected void onStop() {  
        super.onStop();  
        Log.i(TAG, onStop called.);     
    }  
      
    //退出當前Activity時被調用,調用之後Activity就結束了  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        Log.i(TAG, onDestory called.);  
    }  
      
    /** 
     * Activity被系統殺死時被調用. 
     * 例如:屏幕方向改變時,Activity被銷毀再重建;當前Activity處於後台,系統資源緊張將其殺死. 
     * 另外,當跳轉到其他Activity或者按Home鍵回到主屏時該方法也會被調用,系統是為了保存當前View組件的狀態. 
     * 在onPause之前被調用. 
     */  
    @Override  
    protected void onSaveInstanceState(Bundle outState) {  
        outState.putInt(param, param);  
        Log.i(TAG, onSaveInstanceState called. put param:  + param);  
        super.onSaveInstanceState(outState);  
    }  
      
    /** 
     * Activity被系統殺死後再重建時被調用. 
     * 例如:屏幕方向改變時,Activity被銷毀再重建;當前Activity處於後台,系統資源緊張將其殺死,用戶又啟動該Activity. 
     * 這兩種情況下onRestoreInstanceState都會被調用,在onStart之後. 
     */  
    @Override  
    protected void onRestoreInstanceState(Bundle savedInstanceState) {  
        param = savedInstanceState.getInt(param);  
        Log.i(TAG, onRestoreInstanceState called. get param:  + param);  
        super.onRestoreInstanceState(savedInstanceState);  
    }  
    
    //當指定了android:configChanges=orientation|keyboardHidden後,方向改變時onConfigurationChanged被調用 
    // 這裡只是指定orientation 不起作用
    //如果配置了android:screenOrientation屬性,則會使android:configChanges=orientation失效。
    @Override  
    public void onConfigurationChanged(Configuration newConfig) {  
        super.onConfigurationChanged(newConfig);  
        Log.i(TAG, onConfigurationChanged called.);  
        switch (newConfig.orientation) {  
        case Configuration.ORIENTATION_PORTRAIT:  
            setContentView(R.layout.activity_main);  
            break;  
        case Configuration.ORIENTATION_LANDSCAPE:  
            setContentView(R.layout.activity_main);  
            break;  
        }  
    } 
    
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved