摘要:做為四大組件之首,在開發過程中尤為重要,這里我們對的生命周期,啟動模式異常退出的狀態保存,狀態恢復,顯式啟動,隱式啟動以及的隱式啟動中的過濾規則整理總結。
Acitivity做為Android四大組件之首,在Android app開發過程中尤為重要,這里我們對Activity的生命周期,啟動模式 Flags 異常退出的狀態保存,狀態恢復,顯式啟動,隱式啟動以及Activity的隱式啟動中action category data的過濾規則整理總結。
分別覆寫Activity生命周期中幾個重要的方法:
protected void onCreate(Bundle savedInstanceState) { Log.i("target","Activity onCreate"); } protected void onStart() { Log.i("target","Activity onStart"); } protected void onRestart() { Log.i("target","Activity onRestart"); } protected void onResume() { Log.i("target","Activity onResume"); } protected void onPause() { Log.i("target","Activity onPause"); } protected void onStop() { Log.i("target","Activity onStop"); } protected void onDestroy() { Log.i("target","Activity onDestroy"); }
正常情況下生命周期
從進入activity到按下回退鍵退出activity
com.example.root.activitylifecycle I/target: Activity onCreate com.example.root.activitylifecycle I/target: Activity onStart com.example.root.activitylifecycle I/target: Activity onResume com.example.root.activitylifecycle I/target: Activity onPause com.example.root.activitylifecycle I/target: Activity onStop com.example.root.activitylifecycle I/target: Activity onDestroy
屏幕滅掉
com.example.root.activitylifecycle I/target: Activity onCreate com.example.root.activitylifecycle I/target: Activity onStart com.example.root.activitylifecycle I/target: Activity onResume com.example.root.activitylifecycle I/target: Activity onPause com.example.root.activitylifecycle I/target: Activity onStop
可以看到并沒有執行onDestroy方法,接下來點亮屏幕
com.example.root.activitylifecycle I/target: Activity onRestart com.example.root.activitylifecycle I/target: Activity onStart com.example.root.activitylifecycle I/target: Activity onResume
跳轉到其他activity
com.example.root.activitylifecycle I/target: Activity onCreate com.example.root.activitylifecycle I/target: Activity onStart com.example.root.activitylifecycle I/target: Activity onResume com.example.root.activitylifecycle I/target: Activity onPause com.example.root.activitylifecycle I/target: SecondActivity onCreate com.example.root.activitylifecycle I/target: SecondActivity onStart com.example.root.activitylifecycle I/target: SecondActivity onResume com.example.root.activitylifecycle I/target: Activity onStop
注意:當第二個activity執行到onResume方法后第一個activity才執行onStop方法,即當第二個activity就緒之后第一個activity才執行onStop方法,但第一個activity并沒有執行onDestroy方法,它被放入后退棧中。
接下來按下退格鍵返回第一個activity
com.example.root.activitylifecycle I/target: SecondActivity onPause com.example.root.activitylifecycle I/target: Activity onRestart com.example.root.activitylifecycle I/target: Activity onStart com.example.root.activitylifecycle I/target: Activity onResume com.example.root.activitylifecycle I/target: SecondActivity onStop com.example.root.activitylifecycle I/target: SecondActivity onDestroy
第二個activity的生命周期執行完成,第一個activity執行onRestart到onResume重新就緒,再次按下退格鍵
com.example.root.activitylifecycle I/target: Activity onPause com.example.root.activitylifecycle I/target: SecondActivity onStop com.example.root.activitylifecycle I/target: SecondActivity onDestroy
第一個activity生命周期執行結束
當屏幕旋轉的時候activity就會重新執行onCreate,我們可以用屏幕旋轉模擬activity異常銷毀
protected void onSaveInstanceState(Bundle outState) { Log.i("target","Activity onSaveInstanceState"); outState.putString("target","this is onSaveInstanceState saved bundle data"); } protected void onRestoreInstanceState(Bundle savedInstanceState) { Log.i("target","Activity onRestoreInstanceState"); Log.i("target",savedInstanceState.getString("target")); }
日志信息
com.example.root.activitylifecycle I/target: Activity onSaveInstanceState com.example.root.activitylifecycle I/target: Activity onRestoreInstanceState com.example.root.activitylifecycle I/target: this is onSaveInstanceState saved bundle data
standard模式:這是默認模式,每次激活Activity時都會創建Activity實例,并放入任務棧中,使用場景(大多數Activity)
singleTop模式:如果任務棧的棧頂正好存在該Activity的實例,就重用該實例(會調用實例的onNewIntent()),否則就會創建新的實例并放入棧頂,計時棧中已經存在該Activity的實例,只要不在棧頂,都會創建新的實例,使用場景(新聞類或者閱讀類App的內容頁面)
singleTask模式:如果棧中已經有該Activity的實例,就重寫該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在他上面的實例將會被移出棧,如果棧中不存在該實例,將創建新的實例放入棧中,使用場景如瀏覽器的主界面,不管從多少個應用啟動瀏覽器,只會啟動主界面一次,其余都會走onNewIntent,并清空主界面上的其他頁面
singleInstance模式:在一個新棧中創建該Activity的實例,并讓多個應用共享該棧中的該activity實例,一旦該模式的activity實例已經存在于某個棧中,任何英語再激活該activity時都會重用該棧中的實例,會調用(onNewIntent()),其效果相當于多個應用共享一個應用,不管誰激活該activity都會進入同一個應用中,使用場景(鬧鈴提示,將鬧鐘提醒與鬧鐘設置分離),singleinstance不要勇于中間頁面,如果用于中間頁面,跳轉會有問題(A->B->(singleinstance)->C)完全退出后再次啟動首先打開的是B
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//指定Activity為"singleTask"啟動模式
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//指定Activity為"singleTop"啟動模式
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//位于其上的Activity都要出棧,類似"singleTask"
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);//不會出現在Activity的歷史列表中,等同于android:excludeFromRecents="true"
為了匹配過濾列表,需要同時匹配過濾列表中的action,category,data信息。一個Activity可以有多個intentFilter,一個Intent只要能匹配任何一組intentFilter即可成功啟動對應Activity
action區分大小寫,必須存在,只需匹配一個
category的匹配規則可以沒有,若是有,必須全部匹配(可以比過濾規則中少)
示例:
Intent intent=new Intent("com.example.root.saveinstancelearn.secondactivity"); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent);
data與action類似(data語法如下)
data有兩部分組成,mimeType和URI。mimeType指定媒體類型,比如image/jpeg等
匹配示例:
intent.setDataAndType(Uri.parse("file://abc"),"image/png");
ps:如果要為Intent指定完整的data,必須調用setDataAndType方法,不能先調用setData在調用setType,以為這兩個方法會清除對方的值;
實例
intent.setDataAndType(Uri.parse("http://abc"),"video/mpeg");或者
intent.setDataAndType(Uri.parse("http://abc"),"audio/mpeg");
我的文章列表
Email:sxh13208803520@gmail.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66955.html
摘要:注意每個必須在中通過來聲明。執行具體的下載任務接下來我們在中通過來綁定和解除綁定可以看到,這里我們首先創建了一個的匿名類,在里面重寫了方法和方法,這兩個方法分別會在與建立關聯和解除關聯的時候調用。 前言 Hi,大家好,上一期我們講了如何使用BroadcastReceiver,這一期我們講解Android四大組件之Service相關知識。每天一篇技術干貨,每天我們一起進步。 耐心專注不僅...
摘要:作為的四大組件之二,其應用場景非常多。作用可以監聽或接收應用或系統發出的廣播消息,并做出響應。可以指定獨立的進程四大組件都可以通過此屬性指定自己的獨立進程。對于應用內廣播的動態注冊方式,回調中的返回值是。 前言 Hi,大家好,又雙見面啦,上一期我們講了如何使用Activity,肯定有不少小伙伴已經創建了屬于自己的FirstActivity,那么這一期我們主要為大家介紹第二個重要組件Br...
摘要:但是,一定會被執行,從而保證了廣播在死亡前一定會被注銷,從而防止內存泄露。對于應用內廣播的動態注冊非方式,回調中的返回值是 前言 BroadcastReceiver(廣播接收器),屬于Android四大組件之一 在Android開發中,BroadcastReceiver的應用場景非常多 今天,我將詳細講解關于BroadcastReceiver的一切相關知識 目錄 showImg(...
摘要:該始終是其唯一僅有的成員,由此啟動的任何,如果沒有指定返回棧名稱,則新啟動的放入默認的返回棧如果指定了返回棧名稱,則將新啟動的放入指定的返回棧中。 1. 簡介 ? ? ? ?本篇不針對于新手,而是對于Activity中一些常識或者問題進行總結。Activity是Android四大組件之一,為用戶提供與系統交互的界面,每一個應用都有一個或者多個Acticity,這樣會有各種各樣的細節問題...
閱讀 455·2023-04-25 23:00
閱讀 3486·2021-11-22 13:54
閱讀 1886·2021-10-27 14:14
閱讀 1478·2019-08-30 13:59
閱讀 3503·2019-08-23 16:15
閱讀 1948·2019-08-23 16:06
閱讀 3315·2019-08-23 15:26
閱讀 1246·2019-08-23 13:48