乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       kiki的號 2017-04-05

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

      此篇博客意在讓對啟動模式不了解的開發(fā)者對其有一個較為形象的認(rèn)識,至于深入探究,筆者還是推薦去看任玉剛前輩所寫的《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)閉均使用退回鍵)


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


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

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

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

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

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

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



      demo講解:

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


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

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



      standard:標(biāo)準(zhǔn)模式,這也是系統(tǒng)的默認(rèn)模式。

      每次啟動一個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)到自己,簡直太荒唐了,浪費(fèi)內(nèi)存。設(shè)置了singleTop之后,如果還有“自己跳轉(zhuǎn)自己”的操作,就不會再創(chuàng)建一個新的Activity了。


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

      從blue的Activity跳轉(zhuǎn)到了red的Activity,但是當(dāng)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。細(xì)心的同學(xué)已經(jīng)發(fā)現(xiàn),當(dāng)最后按返回鍵的時候,直接返回到red之后就退出了Activity,說明只剩下red一個Activity了,這是為何呢?

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

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

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

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

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



      singleInstance:單例模式。

      這個模式如果不用“棧”的思想來講真的比較復(fù)雜。但是倘若連“?!倍疾欢?,那么一般也用不到這兒啟動模式了。

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




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


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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多