Activity的使用及生命週期探索


生命週期探索請直接移步 標題 10.

1.概述:

提供能夠 ②與用戶交互的 ①界面

2.組件的特點:

  1. 繼承父類或實現接口
  2. 需要註冊
  3. 對象,是系統創建的
  4. 生命週期方法的自動調用

3.如何聲明一個Activity.

  1. 繼承;
  2. 重寫 onCreate() 等;
  3. 註冊;
  4. 佈局;

4.如何啓動一個Activity.

  1. startActivity(intent)

  2. startActivityForResult

    Activity1:startActivityForResult(int requestCode,Intent intent)
    Activity2:setResult(int resultCode,Intent intent);	
    finish();
    Activity1: onActivityResult(int requestCode,int resultCode,Intent intent)
    

5.Intent的使用:

Intent不是組件!意圖,提供不同組件通信的信使。

  1. 要去哪?
    顯式意圖Intent(obj,Class clazz),隱式意圖Intent(String action)

  2. 能帶數據嗎?
    可以!不過這裏的 finish() 不要忘;忘了的話也沒關係……那你就按 back 鍵,不還是 finish() 嘛……

putExtra(String key,Xxx xxx)---getXxxExtra(String key)
setData(Uri uri) ---getData(); 
Uri uri = Uri.parse("tel:" + number); -->url (http:)
									("content:" + )

6.任務棧的結構:先進後出

  1. 不可以操作系統的棧結構;
  2. 如果確實需要操作,可以參考我的 P2P金融項目 筆記 02 提供的 AppManager 類;統一應用程序中所有的Activity的棧管理

7.LaunchMode:

  1. standard ;標準模式;

  2. singleTop 適用於 目標 activity 啓動費時的情況,給目標 activity 設置 singleTop ,防止用戶多次點擊,創建多個活動 (那不更卡了……) ;

  3. singleTask 設置爲此時,任務棧裏只新建一個該活動;當棧頂的活動調用該活動時,自動清空棧中,目標活動上的所有活動;

  4. singleInstance 新建一個棧單獨存儲;少見……

8. Activity的生命週期。

  1. 4 種狀態:運行狀態,暫停狀態,停止狀態,死亡狀態。
    不同狀態之間,切換時,哪些生命週期方法調用;

  2. 7 個生命週期方法。
    onCreate()— onDestroy():對象是否存在。(在對象整個生命週期過程中,只調用一次)
    onStart()— onStop():當前activity是否可見
    onResume() — onPause():當前的activity是否可操作

  3. 面試考查:
    ①Activity1–>Activity2.
    ②demo總結;

9.不同的生命週期方法中,常做哪些操作。

  1. onCreate();setContentView(),視圖的初始化,綁定監聽

  2. onDestroy();正常情況下,銷燬一個activity對象之前調用。

  3. onPause();當activity結束運行狀態時,臨時數據的保存。(不適合執行數據量較大的保存操作:數據庫)

  4. onSaveInstanceState() / onStop():用於保存數據(執行時間較長);onSaveInstanceState() 操作在onPause()和 onStop()之間;

10. Activity 生命週期探索

A. 普通啓動第二個頁面;

  1. P1首先不可操作,onPause()

  2. 而後P2創建;可視;可操作;

  3. 最後P1纔不可見;onStop()

    MainActivity onPause()
    SecondActivity onCreate()
    SecondActivity onStart()
    SecondActivity onResume()
    MainActivity onStop()
    
  4. 在P2通過返回鍵;返回到P1;此時P1調用 onRestart() 或 onCreate()取決於是否 finish(),不過通過 返回鍵的最後,P2會 onDestroy;

    SecondActivity onPause()
    MainActivity onRestart()
    MainActivity onStart()
    MainActivity onResume()
    SecondActivity onStop()
    SecondActivity onDestroy()
    

B. 帶回調啓動第二個頁面;

  1. 從P1攜帶信息去P2時;這裏的 onSaveInstanceState() 在 onStop() 之前執行;這也就決定了,在什麼時候寫數據保存操作;

    MainActivity onPause()
    SecondActivity onCreate()
    SecondActivity onStart()
    SecondActivity onResume()
    MainActivity onSaveInstanceState()
    MainActivity onStop()
    
  2. 從P2攜帶信息回到 P1時;這裏的重中之重是;P1的onActivityResult() 先 onResume() 執行; 以確保重新顯示的時候,之前的數據已經恢復;

     SecondActivity onPause()
     MainActivity onActivityResult()
     MainActivity onRestart()
     MainActivity onStart()
     MainActivity onResume()
     SecondActivity onStop()
     SecondActivity onDestroy()
    

C. 啓動 DialogActivity

  1. dialog 出現在最上層,P1 可見,不可操作;依次執行的是;

    MainActivity onPause()
    MainActivity onSaveInstanceState()
    
  2. 返回到 P1

    MainActivity onResume()
    

D. 啓動 AlertDialog

  1. 效果如下:
    在這裏插入圖片描述

  2. 但是 P1毫無波瀾;
    在這裏插入圖片描述

  3. 這是因爲,AlertDialog 是 P1 的一部分;所以P1的生命週期沒有改變;

    代碼如下,當啓動 DialogActivity 時,啓動的是另外一個 Activity;當啓動 AlertDialog 時;傳入的 參數是 “this”;並且此處也只能是 this;所以 P1 生命週期不改變;

    public void startDialogActivity(View v) {
        startActivity(new Intent(this, DialogActivity.class));
    }
    public void startDialog(View v) {
        new AlertDialog.Builder(this)
                    .setTitle("測試")
                    .setPositiveButton("確定", null)
                    .setNegativeButton("取消", null)
                    .show();   
    }
    

11. 熄屏下的生命週期

  1. 熄滅屏幕;先是不可操作,隨後是不可見;二者之間時保存數據;

    MainActivity onPause()
    MainActivity onSaveInstanceState()
    MainActivity onStop()
    
  2. 點亮屏幕;此時沒有 onActivityResult() ;這個方法需要三個參數:onActivityResult(int requestCode, int resultCode, Intent data)

     MainActivity onRestart()
     MainActivity onStart()
     MainActivity onResume()
    

12. 橫豎屏

  1. 解決橫豎屏造成的 activity 生命週期方法重新調用:

    <activity
                android:name=".MainActivity"
                android:configChanges="keyboardHidden|screenSize|orientation" />
    

聲明:本博客根據尚硅谷項目實戰: 硅谷金融.學習整理;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章