android筆記-頁面轉跳

創(chuàng)建第二個Activity(掌握)

  • 需要在清單文件中為其配置一個activity標簽

  • 標簽中如果帶有這個子節(jié)點,則會在系統(tǒng)中多創(chuàng)建一個快捷圖標

       <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    
  • 一個應用程序可以在桌面創(chuàng)建多個快捷圖標。

  • activity的名稱、圖標可以和應用程序的名稱、圖標不相同

      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
    

Activity的跳轉(掌握)

Activity的跳轉需要創(chuàng)建Intent對象,通過設置intent對象的參數(shù)指定要跳轉Activity

通過設置Activity的包名和類名實現(xiàn)跳轉,稱為顯式意圖

通過指定動作實現(xiàn)跳轉,稱為隱式意圖

顯式意圖(掌握)

  • 跳轉至同一項目下的另一個Activity,直接指定該Activity的字節(jié)碼即可

      Intent intent = new Intent();
      intent.setClass(this, SecondActivity.class);
      startActivity(intent);
    
  • 跳轉至其他應用中的Activity,需要指定該應用的包名和該Activity的類名

      Intent intent = new Intent();
      //啟動系統(tǒng)自帶的撥號器應用
      intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
      startActivity(intent);
    

隱式意圖(掌握)

  • 隱式意圖跳轉至指定Activity

      Intent intent = new Intent();
      //啟動系統(tǒng)自帶的撥號器應用
      intent.setAction(Intent.ACTION_DIAL);
      startActivity(intent);
    
  • 要讓一個Activity可以被隱式啟動,需要在清單文件的activity節(jié)點中設置intent-filter子節(jié)點

      <intent-filter >
          <action android:name="com.itheima.second"/>
          <data android:scheme="asd" android:mimeType="aa/bb"/>
          <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
    
    • action 指定動作(可以自定義,可以使用系統(tǒng)自帶的)
    • data 指定數(shù)據(操作什么內容)
    • category 類別 (默認類別,機頂盒,車載電腦)
  • 隱式意圖啟動Activity,需要為intent設置以上三個屬性,且值必須與該Activity在清單文件中對三個屬性的定義匹配

  • intent-filter節(jié)點及其子節(jié)點都可以同時定義多個,隱式啟動時只需與任意一個匹配即可

獲取通過setData傳遞的數(shù)據(掌握)
    //獲取啟動此Activity的intent對象
    Intent intent = getIntent();
    Uri uri = intent.getData();

顯式意圖和隱式意圖的應用場景(掌握)

  • 顯式意圖用于啟動同一應用中的Activity
  • 隱式意圖用于啟動不同應用中的Activity
    • 如果系統(tǒng)中存在多個Activity的intent-filter同時與你的intent匹配,那么系統(tǒng)會顯示一個對話框,列出所有匹配的Activity,由用戶選擇啟動哪一個

Activity跳轉時的數(shù)據傳遞(掌握)

  • Activity通過Intent啟動時,可以通過Intent對象攜帶數(shù)據到目標Activity

      Intent intent = new Intent(this, SecondActivity.class);
      intent.putExtra("maleName", maleName);
      intent.putExtra("femaleName", femaleName);
      startActivity(intent);
    
  • 在目標Activity中取出數(shù)據

      Intent intent = getIntent();
      String maleName = intent.getStringExtra("maleName");
      String femaleName = intent.getStringExtra("femaleName");
    

Activity生命周期(掌握)

void onCreate()

  • Activity已經被創(chuàng)建完畢

void onStart()

  • Activity已經顯示在屏幕,但沒有得到焦點

void onResume()

  • Activity得到焦點,可以與用戶交互

void onPause()

  • Activity失去焦點,無法再與用戶交互,但依然可見

void onStop()

  • Activity不可見,進入后臺

void onDestroy()

  • Activity被銷毀

void onRestart()

  • Activity從不可見變成可見時會執(zhí)行此方法

使用場景

  • Activity創(chuàng)建時需要初始化資源,銷毀時需要釋放資源;或者播放器應用,在界面進入后臺時需要自動暫停

完整生命周期(entire lifetime)

onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory

可視生命周期(visible lifetime)

onStart-->onResume-->onPause-->onStop

前臺生命周期(foreground lifetime)

onResume-->onPause


Activity的四種啟動模式(掌握)

每個應用會有一個Activity任務棧,存放已啟動的Activity

Activity的啟動模式,修改任務棧的排列情況

  • standard 標準啟動模式

  • singleTop 單一頂部模式

    • 如果任務棧的棧頂存在這個要開啟的activity,不會重新的創(chuàng)建activity,而是復用已經存在的activity。保證棧頂如果存在,不會重復創(chuàng)建。
    • 應用場景:瀏覽器的書簽
  • singeTask 單一任務棧,在當前任務棧里面只能有一個實例存在

    • 當開啟activity的時候,就去檢查在任務棧里面是否有實例已經存在,如果有實例存在就復用這個已經存在的activity,并且把這個activity上面的所有的別的activity都清空,復用這個已經存在的activity。保證整個任務棧里面只有一個實例存在
    • 應用場景:瀏覽器的activity
    • 如果一個activity的創(chuàng)建需要占用大量的系統(tǒng)資源(cpu,內存)一般配置這個activity為singletask的啟動模式。webkit內核 c代碼
  • singleInstance啟動模式非常特殊, activity會運行在自己的任務棧里面,并且這個任務棧里面只有一個實例存在

    • 如果你要保證一個activity在整個手機操作系統(tǒng)里面只有一個實例存在,使用singleInstance
    • 應用場景: 電話撥打界面

橫豎屏切換的生命周期(熟悉)

默認情況下 ,橫豎屏切換, 銷毀當前的activity,重新創(chuàng)建一個新的activity

快捷鍵ctrl+F11

在一些特殊的應用程序常見下,比如游戲,不希望橫豎屏切換activity被銷毀重新創(chuàng)建
需求:禁用掉橫豎屏切換的生命周期

  1. 橫豎屏寫死
    android:screenOrientation="landscape"
    android:screenOrientation="portrait"

  2. 讓系統(tǒng)的環(huán)境 不再去敏感橫豎屏的切換。

      android:configChanges="orientation|screenSize|keyboardHidden"
    

掌握開啟activity獲取返回值(掌握)

從A界面打開B界面, B界面關閉的時候,返回一個數(shù)據給A界面

步驟:
  1. 開啟activity并且獲取返回值

     startActivityForResult(intent, 0);
    
  2. 在新開啟的界面里面實現(xiàn)設置數(shù)據的邏輯

     Intent data = new Intent();
     data.putExtra("phone", phone);
     //設置一個結果數(shù)據,數(shù)據會返回給調用者
     setResult(0, data);
     finish();//關閉掉當前的activity,才會返回數(shù)據
    
  3. 在開啟者activity里面實現(xiàn)方法

     //通過data獲取返回的數(shù)據
     onActivityResult(int requestCode, int resultCode, Intent data) {
     
     }
    
  4. 通過判斷請求碼和結果碼確定返回值的作用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,777評論 25 709
  • 鉭、鈮同族,電子結構相似,物理化學性質接近,在自然界中總是共生。 鉭鈮礦主要是鉭鐵礦和鈮鐵礦,還含有鉭錫石、細晶石...
    qdkj2016閱讀 2,391評論 0 0
  • 我不是一個隨便的人。 擱筆數(shù)年,猝然拾起,已不復當年神采,面對空白的紙卷,竟寫不出一絲巧言妙語,笨...
    第九天的海子閱讀 200評論 0 0

友情鏈接更多精彩內容