小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

android Activity的啟動模式 作用簡析+demo詳解

 kiki的號 2017-04-05

筆者近期做的一個項目用到了Activity的啟動模式,也算是第一次深刻地領(lǐng)會到了其強大與方便。在此也是將自己所得與大家分享,自己寫了一個比較簡易的demo,便于讓大家理解。

此篇博客意在讓對啟動模式不了解的開發(fā)者對其有一個較為形象的認識,至于深入探究,筆者還是推薦去看任玉剛前輩所寫的《Android開發(fā)藝術(shù)探索》了。

網(wǎng)上對Activity的啟動模式講解的博客有很多,但是大部分都需要掌握“?!钡闹R,而且很多并不是那么通俗易懂。筆者打算獨辟蹊徑,一方面通過百度地圖講其作用另一方面通過自己寫的demo演示來講解4種啟動模式。


作用:

大家對android百度地圖一定非常熟悉,讓我們來看一下下面的圖片:(百度地圖)

        

假設(shè)以上3張圖片依次為ABC,筆者得到這三張圖的順序分別為:(好奇的讀者可以自己試試)

打開A,打開B,打開C,打開B,關(guān)閉B,關(guān)閉C,回到A,退出程序。(關(guān)閉均使用退回鍵)


大家可以仔細觀察下A與C兩張圖,不難發(fā)現(xiàn)這其實就是同一個Activity,只是通過動態(tài)改變布局使得大家沒有察覺到。


那么問題來了,是如何辦到復(fù)用同一個Activity的呢?

無疑就是巧妙地使用了Activity的啟動模式。

按照正常的啟動模式,A打開B,B再打開C,應(yīng)當會有3個Activity,但是很顯然,我們這個test中只有2個Activity,證據(jù)就是處在C圖片的時候按退回鍵并沒有跳轉(zhuǎn)到另外的一個Activity,而是改變了一下布局,隨后再按退回鍵就會推出程序。

這是一個多么實用的技能??!如果會了這個,我們就再也不用老是各種無腦的finish()了!

沒錯,這就是Activity的啟動模式的一個作用了。

(至于是否有其他什么作用,筆者也還未領(lǐng)悟,歡迎指點)



demo講解:

首先我們是要知道一共有四種啟動模式:standard(標準模式),singleTop(棧頂復(fù)用模式),singleTask(棧內(nèi)復(fù)用模式),singleInstance(單例模式)。


新手可能會詢問啟動模式在哪里設(shè)置,筆者在這里解答一下:

在AndroidManifest里面,Activity的launchMode屬性中直接可以設(shè)置。



standard:標準模式,這也是系統(tǒng)的默認模式。

每次啟動一個Activity都會重新創(chuàng)建一個新的實例,不管這個實例是否存在。


如圖,筆者依次打開的Activity是,red,blue,green,green。然后按退回鍵關(guān)閉的順序分別為,green,green,blue,red。



singleTop:棧頂復(fù)用模式。

其實解釋很簡單,像上面的standard,我們可以發(fā)現(xiàn),green的Activity是可以再啟動一個green的Activity的,他居然可以自己跳轉(zhuǎn)到自己,簡直太荒唐了,浪費內(nèi)存。設(shè)置了singleTop之后,如果還有“自己跳轉(zhuǎn)自己”的操作,就不會再創(chuàng)建一個新的Activity了。


如圖,筆者red的Activity設(shè)置了singleTop的啟動模式。

從blue的Activity跳轉(zhuǎn)到了red的Activity,但是當red自己跳轉(zhuǎn)到自己的時候,就不會再次創(chuàng)建一個新的實例。



singleTask:棧內(nèi)復(fù)用模式。

這個啟動模式就更方便了,更像是筆者上面所講述的百度地圖的地圖界面的啟動模式。在這種模式下,如果這個Activity已經(jīng)被創(chuàng)建過了,那么就不會再次被創(chuàng)建了,而是將之前創(chuàng)建過的那個實例拿過來直接用。

但是如果Activity沒有創(chuàng)建過,那么就會重新創(chuàng)建一個任務(wù)棧,并把新創(chuàng)建的Activity放入。需要理解這個就必須要懂棧的概念了,筆者此處為了讓新手理解,先避開。


如圖,筆者blue的Activity設(shè)置了singleTask的啟動模式。

筆者依次打的Activity為,red,blue,green,red,blue。細心的同學(xué)已經(jīng)發(fā)現(xiàn),當最后按返回鍵的時候,直接返回到red之后就退出了Activity,說明只剩下red一個Activity了,這是為何呢?

主要有三點原因:(不懂棧的先只需要理解第一個即可,如有興趣,可以自己再深入理解)

1、第二個blue復(fù)用了之前的一個blue

2、創(chuàng)建第一個blue的時候新建了一個任務(wù)棧

3、因為singleTask默認具有clearTop的效果,比如是ADBC 4個Activity,倘若D為singleTask,那么當再次啟動D的時候,就會只留下AD兩個Activity,中間了Activity都被clear了。

此處兩個blue之間的green和red都被clear了。所以打開第二個blue的時候?qū)嶋H上存在兩個任務(wù)棧,第一個任務(wù)棧只有一個red,第二個任務(wù)棧只有一個blue,所以按返回的時候就回到了red,再按返回就會退出了。



singleInstance:單例模式。

這個模式如果不用“?!钡乃枷雭碇v真的比較復(fù)雜。但是倘若連“?!倍疾欢敲匆话阋灿貌坏竭@兒啟動模式了。

稍微講解一下:在默認的啟動模式下,當我們啟動Activity的時候,系統(tǒng)會創(chuàng)建多個實例并把他們一一放入任務(wù)棧,當我們按back鍵,這些Activity就會一一退回。但是在singleInstance中就有所不同了,singleInstance的Activity是直接新建一個任務(wù)棧,并且獨自運行在里面,并且由于棧內(nèi)復(fù)用性的特性,后序均不會創(chuàng)建新的Activity。




筆者此篇博客意在讓新手更能理解Activity的啟動模式,可能有多處講地不夠嚴謹,如有前輩不吝指點,不甚感激。


示范demo下載地址:http://download.csdn.net/detail/double2hao/9466241

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多