android筆記-頁面轉跳

創建第二個Activity(掌握)

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

  • 標簽中如果帶有這個子節點,則會在系統中多創建一個快捷圖標

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

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

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

Activity的跳轉(掌握)

Activity的跳轉需要創建Intent對象,通過設置intent對象的參數指定要跳轉Activity

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

通過指定動作實現跳轉,稱為隱式意圖

顯式意圖(掌握)

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

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

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

隱式意圖(掌握)

  • 隱式意圖跳轉至指定Activity

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

      <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 指定動作(可以自定義,可以使用系統自帶的)
    • data 指定數據(操作什么內容)
    • category 類別 (默認類別,機頂盒,車載電腦)
  • 隱式意圖啟動Activity,需要為intent設置以上三個屬性,且值必須與該Activity在清單文件中對三個屬性的定義匹配

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

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

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

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

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

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

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

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

Activity生命周期(掌握)

void onCreate()

  • Activity已經被創建完畢

void onStart()

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

void onResume()

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

void onPause()

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

void onStop()

  • Activity不可見,進入后臺

void onDestroy()

  • Activity被銷毀

void onRestart()

  • Activity從不可見變成可見時會執行此方法

使用場景

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

完整生命周期(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,不會重新的創建activity,而是復用已經存在的activity。保證棧頂如果存在,不會重復創建。
    • 應用場景:瀏覽器的書簽
  • singeTask 單一任務棧,在當前任務棧里面只能有一個實例存在

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

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

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

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

快捷鍵ctrl+F11

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

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

  2. 讓系統的環境 不再去敏感橫豎屏的切換。

      android:configChanges="orientation|screenSize|keyboardHidden"
    

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

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

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

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