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

資訊專欄INFORMATION COLUMN

Android開發(fā)藝術(shù)探索--Activity

ephererid / 2053人閱讀

摘要:的控制又來控制一個棧和其狀態(tài)。但是當(dāng)變化發(fā)生的時候,將會有一個回調(diào)函數(shù)被執(zhí)行。。前一個仍然保留在返回棧當(dāng)中,但會處于停止?fàn)顟B(tài)。

接下來根據(jù)自己的平時的學(xué)習(xí)和自己最近要讀的兩本書《android開發(fā)藝術(shù)探索》和《android群英傳》來梳理記錄下自己的學(xué)習(xí)過程和對于遇到問題如何處理解決,還有將會陸續(xù)下一些有關(guān)關(guān)于如何將Java代碼寫的更優(yōu)雅的,結(jié)合自己讀過的書來做個記錄整理型的系列博客。這兩本書主要是關(guān)于android底層的實現(xiàn)的講得比較多,對于項目的實戰(zhàn)開發(fā),看了一下,《app研發(fā)錄》挺不錯的。對于開始架構(gòu)的設(shè)計上講得很不錯。
接下來是個人在Activity學(xué)習(xí)中,記錄下來的一些知識和個人的一些理解,同時附帶了自己的學(xué)習(xí)實例源碼。

Activity生命周期 Activity正常生命周期

涉及到activity的生命周期要提的是activity的七個生命周期回調(diào)函數(shù),首先看一下其各自的執(zhí)行順序。用戶參與下的Activity所進行的正常生命周期.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("MAIN", "onCreate");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MAIN","onRestart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MAIN", "onStart");

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MAIN","onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MAIN","onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MAIN","onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MAIN","onDestroy");
    }
}

測試結(jié)果
啟動
onCreate->onStart->onResume
屏幕熄滅
onPause->onStop
屏幕點亮
onStart->onResume
按下HOME鍵
onPause->onStop
按下返回鍵
onPause->onStop->onDestroy

各個生命周期特征

onCreate:當(dāng)打開一個新的Activity時執(zhí)行,可以用來加載布局或者是加載一些數(shù)據(jù)。
onStart:這個時候,Activity已經(jīng)可見,只是處在后臺,無法與用戶交互。
onReStart:在執(zhí)行了onStop之后,在此回到該Activity時,會執(zhí)行,可以用來進行一些恢復(fù)性操作。
onResume:此時activity已經(jīng)可見,而且可以和用戶進行交互。
onPause:表示activity正在停止,可進行一些動畫停止之類的操作處理。不可過于耗時。
onStop:activity即將停止,可以進行一些稍微耗時的操作。
onDestroy:這個時候,Activity被銷毀,可以進行一些回收工作和最終的資源釋放。

Activity跳轉(zhuǎn)時,兩個activity的生命周期如何變化,通過一個Activity向另一個Activity進行跳轉(zhuǎn),生命周期的變化時。
onCreate->onStart->onResume->onPause->onCreate->onStart->onResume->onStop
粗體部分為第二個Activity的活動周期,可以看出,當(dāng)?shù)谝粋€onPause執(zhí)行完之后,第二個activity便開始啟動,因此為了讓第二個activity啟動的速度加快,我們必須要將第一個activity中的onPause方法執(zhí)行的任務(wù)要盡量的少。activity的控制又AMS(Activity Manager Service)來控制一個activity棧和其狀態(tài)。

Activity異常生命周期

由于系統(tǒng)原因,導(dǎo)致的activity被創(chuàng)建銷毀
資源相關(guān)的系統(tǒng)配置導(dǎo)致的activity被殺死,典型的例子就是在橫豎屏切換的時候,系統(tǒng)提供了一個恢復(fù)機制,提供了兩個回調(diào)函數(shù)。onSaveInstanceState(),onRestoreInstanceState(),第一個函數(shù)在onPause之后會被執(zhí)行,而且是每次都會被執(zhí)行,但是對于onRestoreInstanceState()只有在activity被重新創(chuàng)建之后,才會在onStart之后執(zhí)行,所以在app開啟到屏幕方向切換的過程中生命周期的變化為:
onCreate->onStart->onResume->onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume
在橫豎過程中,前一個activity被銷毀,又重新創(chuàng)建一個。
在橫豎的變化中,不難發(fā)現(xiàn)的是,我們即使沒有對其中的控件做任何處理,其仍然可以在狀態(tài)切換之后,保持之前的狀態(tài),這個是如何實現(xiàn)的呢?在Activity被意外終結(jié)時,首先會去調(diào)用onSaveInstanceState()來保存數(shù)據(jù),然后其會委托Window去保存數(shù)據(jù),然后Window在委托其上層容器,ViewGroup,然后其通知哥哥子元素來保存各自的數(shù)據(jù),到此view的數(shù)據(jù)保存完成。
資源相關(guān)配置有很多,比如屏幕大小發(fā)生變化,SIM卡發(fā)生變化,字體大小發(fā)生變化,這些變化都可能會導(dǎo)致出現(xiàn)activity重啟,為了解決這個問題要采取的方式是,設(shè)置activity 的configChanges屬性,然后添加相應(yīng)的條件之后,就不會導(dǎo)致因為相關(guān)的配置的變化出現(xiàn)activity重啟的現(xiàn)象。但是當(dāng)變化發(fā)生的時候,將會有一個回調(diào)函數(shù)被執(zhí)行。onConfigurationChanged()。

Activity啟動規(guī)則

在講啟動規(guī)則之前,先要說幾個概念。
任務(wù)棧:每一個應(yīng)用在打開的時候,都會創(chuàng)建一個或者多個任務(wù)棧,里面是activity,每個activity有一個屬性為taskAffinity,該屬性用來制定其要處在的任務(wù)棧的名稱標(biāo)示,默認(rèn)情況下,activity會繼承application,而application則會以包名作為其標(biāo)示。所以在監(jiān)聽一個應(yīng)用是否被打開的時候,可以監(jiān)聽其任務(wù)棧的名稱來判斷一個應(yīng)用是否當(dāng)前被打開。

Activity四種啟動模式

standard:該種模式下,無論當(dāng)前的activity是否已經(jīng)存在,都會重新啟動一個,處在啟動方的棧中,所以不可以在application的context下啟動。
singleTop:該種模式下,如果當(dāng)前任務(wù)棧中所要啟動的activity位于棧頂,則不會重新啟動,否則重新啟動一個activity,采用該種方式,則會先暫停一下,調(diào)用onNewIntent,然后再調(diào)用onResume。
singleTask:該中模式下,會先去尋找其對應(yīng)的任務(wù)棧,然后在其任務(wù)棧中,尋找是否存在該實例,如果不存在,則創(chuàng)建實例,如果存在,則將其置為棧頂,如果又在其上的,則將其清除,如果不存在任務(wù)棧,則創(chuàng)建一個任務(wù)棧,然后創(chuàng)建實例。
singleInstance:多帶帶存放在一個棧中,當(dāng)該模式啟動的activity被創(chuàng)建后會多帶帶處在一個棧中,然后該棧不會創(chuàng)建新的activity。
對于啟動模式的設(shè)定,可以在xml文件中設(shè)置,同時也可以在啟動的時候,通過addFlags的方式進行設(shè)定,兩種方式的優(yōu)先級為動態(tài)設(shè)置的優(yōu)先級高。

Activity匹配規(guī)則

我們可以通過在activity中的IntentFilter標(biāo)簽中設(shè)置相應(yīng)的過濾信息來唯一的標(biāo)示確認(rèn)一個activity,過濾信息有action,category,data,在我們平日里使用手機的時候,進行分享的時候,或者是選擇某個應(yīng)用打開某個文件的時候,都會出現(xiàn)一個應(yīng)用列表來供我們選擇,這個時候,其實是通過intent來打開某個activity的時候,匹配到的一些,過濾信息的匹配元素在匹配上擁有不同的規(guī)則。
action:一個intent中可以有多個action,但是只要其中一個和activity的相同,就可以匹配成功
data:過濾規(guī)則中的一個或多個和activity相同,才可以進行匹配。在設(shè)置的時候,通過setType和setData只能設(shè)置一個,因此需要通過setDataAndType,才可以同時對type和data進行,data由data和type。
category:可以不設(shè)置,但是如果設(shè)置了,其中的每一個都要和activity中對相匹配。

Activity任務(wù)棧

任務(wù)是一個Activity的集合,它使用棧的方式來管理其中的Activity,這個棧又被稱為返回棧(back stack),棧中Activity的順序就是按照它們被打開的順序依次存放的。
手機的Home界面是大多數(shù)任務(wù)開始的地方,當(dāng)用戶在Home界面上點擊了一個應(yīng)用的圖標(biāo)時,這個應(yīng)用的任務(wù)就會被轉(zhuǎn)移到前臺。如果這個應(yīng)用目前并沒有任何一個任務(wù)的話(說明這個應(yīng)用最近沒有被啟動過),系統(tǒng)就會去創(chuàng)建一個新的任務(wù),并且將該應(yīng)用的主Activity放入到返回棧當(dāng)中。

當(dāng)一個Activity啟動了另外一個Activity的時候,新的Activity就會被放置到返回棧的棧頂并將獲得焦點。前一個Activity仍然保留在返回棧當(dāng)中,但會處于停止?fàn)顟B(tài)。當(dāng)用戶按下Back鍵的時候,棧中最頂端的Activity會被移除掉,然后前一個Activity則會得重新回到最頂端的位置。返回棧中的Activity的順序永遠(yuǎn)都不會發(fā)生改變,我們只能向棧頂添加Activity,或者將棧頂?shù)腁ctivity移除掉。因此,返回棧是一個典型的后進先出(last in, first out)的數(shù)據(jù)結(jié)構(gòu)。

任務(wù)除了可以被轉(zhuǎn)移到前臺之外,當(dāng)然也是可以被轉(zhuǎn)移到后臺的。當(dāng)用戶開啟了一個新的任務(wù),或者點擊Home鍵回到主屏幕的時候,之前任務(wù)就會被轉(zhuǎn)移到后臺了。當(dāng)任務(wù)處于后臺狀態(tài)的時候,返回棧中所有的Activity都會進入停止?fàn)顟B(tài),但這些Activity在棧中的順序都會原封不動地保留著。

接下來將會寫一些關(guān)于Android中IPC相關(guān)的文章。

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

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

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<