成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Android四大組件之Activity

evin2016 / 1453人閱讀

摘要:做為四大組件之首,在開(kāi)發(fā)過(guò)程中尤為重要,這里我們對(duì)的生命周期,啟動(dòng)模式異常退出的狀態(tài)保存,狀態(tài)恢復(fù),顯式啟動(dòng),隱式啟動(dòng)以及的隱式啟動(dòng)中的過(guò)濾規(guī)則整理總結(jié)。

Acitivity做為Android四大組件之首,在Android app開(kāi)發(fā)過(guò)程中尤為重要,這里我們對(duì)Activity的生命周期啟動(dòng)模式 Flags 異常退出的狀態(tài)保存,狀態(tài)恢復(fù),顯式啟動(dòng),隱式啟動(dòng)以及Activity的隱式啟動(dòng)action category data的過(guò)濾規(guī)則整理總結(jié)。

Activity的生命周期

分別覆寫(xiě)Activity生命周期中幾個(gè)重要的方法:

    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");
    }
不同情境下生命周期方法執(zhí)行順序

正常情況下生命周期
從進(jìn)入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

可以看到并沒(méi)有執(zhí)行onDestroy方法,接下來(lái)點(diǎn)亮屏幕

com.example.root.activitylifecycle I/target: Activity onRestart
com.example.root.activitylifecycle I/target: Activity onStart
com.example.root.activitylifecycle I/target: Activity onResume

跳轉(zhuǎn)到其他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

注意:當(dāng)?shù)诙€(gè)activity執(zhí)行到onResume方法后第一個(gè)activity才執(zhí)行onStop方法,即當(dāng)?shù)诙€(gè)activity就緒之后第一個(gè)activity才執(zhí)行onStop方法,但第一個(gè)activity并沒(méi)有執(zhí)行onDestroy方法,它被放入后退棧中。
接下來(lái)按下退格鍵返回第一個(gè)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

第二個(gè)activity的生命周期執(zhí)行完成,第一個(gè)activity執(zhí)行onRestartonResume重新就緒,再次按下退格鍵

com.example.root.activitylifecycle I/target: Activity onPause
com.example.root.activitylifecycle I/target: SecondActivity onStop
com.example.root.activitylifecycle I/target: SecondActivity onDestroy

第一個(gè)activity生命周期執(zhí)行結(jié)束

Activity異常時(shí)數(shù)據(jù)保存于數(shù)據(jù)恢復(fù)

當(dāng)屏幕旋轉(zhuǎn)的時(shí)候activity就會(huì)重新執(zhí)行onCreate,我們可以用屏幕旋轉(zhuǎn)模擬activity異常銷(xiāo)毀

    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
Activity的LaunchMode

standard模式:這是默認(rèn)模式,每次激活A(yù)ctivity時(shí)都會(huì)創(chuàng)建Activity實(shí)例,并放入任務(wù)棧中,使用場(chǎng)景(大多數(shù)Activity)

singleTop模式:如果任務(wù)棧的棧頂正好存在該Activity的實(shí)例,就重用該實(shí)例(會(huì)調(diào)用實(shí)例的onNewIntent()),否則就會(huì)創(chuàng)建新的實(shí)例并放入棧頂,計(jì)時(shí)棧中已經(jīng)存在該Activity的實(shí)例,只要不在棧頂,都會(huì)創(chuàng)建新的實(shí)例,使用場(chǎng)景(新聞?lì)惢蛘唛喿x類(lèi)App的內(nèi)容頁(yè)面)

singleTask模式:如果棧中已經(jīng)有該Activity的實(shí)例,就重寫(xiě)該實(shí)例(會(huì)調(diào)用實(shí)例的onNewIntent())。重用時(shí),會(huì)讓該實(shí)例回到棧頂,因此在他上面的實(shí)例將會(huì)被移出棧,如果棧中不存在該實(shí)例,將創(chuàng)建新的實(shí)例放入棧中,使用場(chǎng)景如瀏覽器的主界面,不管從多少個(gè)應(yīng)用啟動(dòng)瀏覽器,只會(huì)啟動(dòng)主界面一次,其余都會(huì)走onNewIntent,并清空主界面上的其他頁(yè)面

singleInstance模式:在一個(gè)新棧中創(chuàng)建該Activity的實(shí)例,并讓多個(gè)應(yīng)用共享該棧中的該activity實(shí)例,一旦該模式的activity實(shí)例已經(jīng)存在于某個(gè)棧中,任何英語(yǔ)再激活該activity時(shí)都會(huì)重用該棧中的實(shí)例,會(huì)調(diào)用(onNewIntent()),其效果相當(dāng)于多個(gè)應(yīng)用共享一個(gè)應(yīng)用,不管誰(shuí)激活該activity都會(huì)進(jìn)入同一個(gè)應(yīng)用中,使用場(chǎng)景(鬧鈴提示,將鬧鐘提醒與鬧鐘設(shè)置分離),singleinstance不要勇于中間頁(yè)面,如果用于中間頁(yè)面,跳轉(zhuǎn)會(huì)有問(wèn)題(A->B->(singleinstance)->C)完全退出后再次啟動(dòng)首先打開(kāi)的是B

Activity的Flags

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//指定Activity為"singleTask"啟動(dòng)模式
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//指定Activity為"singleTop"啟動(dòng)模式
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//位于其上的Activity都要出棧,類(lèi)似"singleTask"
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);//不會(huì)出現(xiàn)在Activity的歷史列表中,等同于android:excludeFromRecents="true"

IntentFilter的匹配規(guī)則

為了匹配過(guò)濾列表,需要同時(shí)匹配過(guò)濾列表中的action,category,data信息。一個(gè)Activity可以有多個(gè)intentFilter,一個(gè)Intent只要能匹配任何一組intentFilter即可成功啟動(dòng)對(duì)應(yīng)Activity

action的匹配規(guī)則

action區(qū)分大小寫(xiě),必須存在,只需匹配一個(gè)
category的匹配規(guī)則可以沒(méi)有,若是有,必須全部匹配(可以比過(guò)濾規(guī)則中少)
示例:


    
    
    
Intent intent=new Intent("com.example.root.saveinstancelearn.secondactivity");               
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
data的匹配規(guī)則

data與action類(lèi)似(data語(yǔ)法如下)

data有兩部分組成,mimeType和URI。mimeType指定媒體類(lèi)型,比如image/jpeg等
匹配示例:


    

intent.setDataAndType(Uri.parse("file://abc"),"image/png");

ps:如果要為Intent指定完整的data,必須調(diào)用setDataAndType方法,不能先調(diào)用setData在調(diào)用setType,以為這兩個(gè)方法會(huì)清除對(duì)方的值;

實(shí)例


    
    

intent.setDataAndType(Uri.parse("http://abc"),"video/mpeg");或者
intent.setDataAndType(Uri.parse("http://abc"),"audio/mpeg");

更多關(guān)于java的文章請(qǐng)戳這里:(您的留言意見(jiàn)是對(duì)我最大的支持)

我的文章列表

Email:[email protected]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66955.html

相關(guān)文章

  • Android四大組件Service

    摘要:注意每個(gè)必須在中通過(guò)來(lái)聲明。執(zhí)行具體的下載任務(wù)接下來(lái)我們?cè)谥型ㄟ^(guò)來(lái)綁定和解除綁定可以看到,這里我們首先創(chuàng)建了一個(gè)的匿名類(lèi),在里面重寫(xiě)了方法和方法,這兩個(gè)方法分別會(huì)在與建立關(guān)聯(lián)和解除關(guān)聯(lián)的時(shí)候調(diào)用。 前言 Hi,大家好,上一期我們講了如何使用BroadcastReceiver,這一期我們講解Android四大組件之Service相關(guān)知識(shí)。每天一篇技術(shù)干貨,每天我們一起進(jìn)步。 耐心專(zhuān)注不僅...

    archieyang 評(píng)論0 收藏0
  • Android四大組件BroadcastReceiver

    摘要:作為的四大組件之二,其應(yīng)用場(chǎng)景非常多。作用可以監(jiān)聽(tīng)或接收應(yīng)用或系統(tǒng)發(fā)出的廣播消息,并做出響應(yīng)。可以指定獨(dú)立的進(jìn)程四大組件都可以通過(guò)此屬性指定自己的獨(dú)立進(jìn)程。對(duì)于應(yīng)用內(nèi)廣播的動(dòng)態(tài)注冊(cè)方式,回調(diào)中的返回值是。 前言 Hi,大家好,又雙見(jiàn)面啦,上一期我們講了如何使用Activity,肯定有不少小伙伴已經(jīng)創(chuàng)建了屬于自己的FirstActivity,那么這一期我們主要為大家介紹第二個(gè)重要組件Br...

    plus2047 評(píng)論0 收藏0
  • Android四大組件BroadcastReceiver全解析

    摘要:但是,一定會(huì)被執(zhí)行,從而保證了廣播在死亡前一定會(huì)被注銷(xiāo),從而防止內(nèi)存泄露。對(duì)于應(yīng)用內(nèi)廣播的動(dòng)態(tài)注冊(cè)非方式,回調(diào)中的返回值是 前言 BroadcastReceiver(廣播接收器),屬于Android四大組件之一 在Android開(kāi)發(fā)中,BroadcastReceiver的應(yīng)用場(chǎng)景非常多 今天,我將詳細(xì)講解關(guān)于BroadcastReceiver的一切相關(guān)知識(shí) 目錄 showImg(...

    yearsj 評(píng)論0 收藏0
  • Android四大組件Activity全解析

    摘要:該始終是其唯一僅有的成員,由此啟動(dòng)的任何,如果沒(méi)有指定返回棧名稱(chēng),則新啟動(dòng)的放入默認(rèn)的返回棧如果指定了返回棧名稱(chēng),則將新啟動(dòng)的放入指定的返回棧中。 1. 簡(jiǎn)介 ? ? ? ?本篇不針對(duì)于新手,而是對(duì)于Activity中一些常識(shí)或者問(wèn)題進(jìn)行總結(jié)。Activity是Android四大組件之一,為用戶(hù)提供與系統(tǒng)交互的界面,每一個(gè)應(yīng)用都有一個(gè)或者多個(gè)Acticity,這樣會(huì)有各種各樣的細(xì)節(jié)問(wèn)題...

    leone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<