2025-02-10

 

詳細介紹如何創建Activity、生命周期、內存管理、啟動模式。

 

創建Activity

 

一.定義Activity

 

   1. 定義Activity 定義類繼承Activity

 

   2.在AndroidManifest.xml的節點中聲明<activity>

 

 

顯式意圖創建Activity三種方式方式

 

 

//第一種方式:構造函數,代碼少 

Intent intent1 =new Intent(this,NewActivity.class); 

startActivity(intent1); 

 

//第二種方式:類名形式,靈活,可擴展性強 

Intent intent2 =new Intent();  

intent2.setClassName(this,"cn.test.activity.NewActivity"); 

startActivity(intent2); 

 

//第三種方式 :包名類名形式,可啟動其他程序中的Activity 

Intent intent3 =new Intent(); 

intent3.setClassName("cn.test.taskdownloader","cn.test.taskdownloader.MainActivity"); 

startActivity(intent3); 

 

二.創建Activity並傳遞數據

 

       1.在意圖對象中封裝瞭一個Bundle對象,可以用來攜帶數據

 

       2.在新Activity中可以獲得意圖對象以獲取其中Bundle保存的數據

 

 

//傳遞數據方式一 

Intent intent1 =new Intent(this,NewActivity.class); 

Bundle bundle=new Bundle(); 

bundle.putString("data","Test"); 

intent1.putExtras(bundle); 

startActivity(intent1); 

 

//獲取意圖方式一 

Bundle bundle2 =getIntent().getExtras(); 

Toast.makeText(this,bundle2.getString("data"),0).show(); 

 

//傳遞數據方式二 

Intent intent2 =new Intent(this,NewActivity.class); 

intent2.putExtra("data","Test2"); 

startActivity(intent2); 

 

//獲取意圖方式二 

 Toast.makeText(this,getIntent().getStringExtra("data"),0).show(); 

 

 

三.創建Activity獲取返回數據

 

      1. 使用startActivityForResult(Intent intent, int requestCode) 方法打開Activity

 

      2. 重寫onActivityResult(int requestCode, int resultCode, Intent data) 方法

 

      3 .新Activity中調用setResult(int resultCode, Intent data) 設置返回數據之後,關閉Activity就會調用onActivityResult方法

 

 請求的activity:

 

public class MainActivity extends Activity { 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

    } 

    /**

     * 創建Activity獲取返回數據

     * @param view

     */ 

    public void createNew(View view){ 

        Intent intent1 =new Intent(this,NewActivity.class); 

        intent1.putExtra("data","請求數據"); 

        //打開Activity等待返回 

        startActivityForResult(intent1,100);   

    } 

    /**

     * 重寫onActivityResult,關閉Activity就會調用此方法

     */ 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        Toast.makeText(this,"requestCode:"+requestCode+",requestCode:"+resultCode+",data"+data.getStringExtra("result"),0).show(); 

    } 

返回的activity:

 

 

public class NewActivity extends Activity { 

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.new_activity); 

        Toast.makeText(this,getIntent().getStringExtra("data"),0).show(); 

        //設置返回數據 

        Intent data =new Intent(); 

        data.putExtra("result","返回的數據"); 

        setResult(200,data); 

    } 

四.隱式意圖創建Activity

 

     1.顯式意圖是指在創建意圖時指定瞭組件,而隱式意圖則不指定組件,通過動作、類型、數據匹配對應的組件

 

     2.在清單文件中定義<activity>時需要定義<intent-filter>才能被隱式意圖啟動

 

     3. <intent-filter>中至少配置一個<action>和一個<category>,否則無法被啟動

 

     4.Intent對象中設置的action、category、data在<intent-filter>必須全部包含才能啟動

 

     5.<intent-filter>中的<action>、<category>、<data>都可以配置多個,Intent對象中不用全部匹配,每樣匹配一個即可啟動

 

     6.如果一個意圖可以匹配多個Activity,Android系統會提示選擇

 

生命周期

一.Acitivity三種狀態

 

   運行:activity在最前端運行

 

   暫停:activity可見,但前端還有其他acti vity,被覆蓋一部分,或者前端activity透明

 

   停止:activity不可見,完全被覆蓋

 

二.生命周期相關方法

 

   onCreate:創建時調用,或者程序在暫停、停止狀態下被殺死之後重新打開時也會調用

 

   onStart:onCreate之後或者從停止狀態恢復時調用

 

   onResume:onStart之後或者從暫停狀態恢復時調用,從停止狀態恢復時由於調用onStart,也會調用onResume

 

   onPause:進入暫停、停止狀態,或者銷毀時會調用

 

   onStop:進入停止狀態,或者銷毀時會調用

 

   onDestroy:銷毀時調用

 

   onRestart:從停止狀態恢復時調用

 

如圖所示:

 

 

三.保存信息相關方法

 

             onSaveInstanceState:在Activity被動的摧毀或停止的時候調用,用於保存運行數據,可以將數據存在在Bundle中

 

             onRestoreInstanceState:該方法在Activity被重新繪制的時候調用,例如改變屏幕方向,savedInstanceState為onSaveInstanceState保存的數據

 

內存管理

Android系統在運行多個進程時,如果系統資源不足,會強制結束一些進程。優先選擇哪個進程來結束是有優先級的。以下順序靠上的優先結束

 

   空:進程中所有Activity都已銷毀

 

   後臺:進程中有一個停止狀態的Activity

 

   服務:進程中一個運行中的Service

 

   可見:進程中有一個暫停狀態的Activity

 

   前臺:進程中正在運行一個Activity

 

啟動模式

1.在AndroidManifest.xml中的<activity>標簽中可以配置android:launchMode屬性,用來控制Actvity的啟動模式

 

2.在Android系統中我們創建的Acitivity是以棧的形式呈現的

 

    standard:每次調用startActivity()啟動時都會創建一個新的Activity放在棧頂

 

    singleTop:如果啟動的Activity時,指定Activity不在棧頂就創建,如在棧頂,則不再創建

 

    singleTask:如果啟動的Activity不存在就創建,如果存在直接跳轉到指定的Activity所在位置

 

    singleInstance:如果啟動的Activity不存在就創建,如果存在就將指定的Activity移動到棧頂

摘自:傅榮康專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *