Activity的四大啟動方式&&啟動Activity引起的記憶體洩露問題
阿新 • • 發佈:2019-02-10
前情提要
作為一個安卓程式猿,掙大錢的問題深深的困擾著我們,但是記憶體洩露像一座大山,阻擋在我們面前,我們必須幹掉他,繼續向前。
Activity四大啟動方式
- standard(預設)
預設模式,可以不用寫配置。在這個模式下,都會預設建立一個新的例項。因此,在這種模式下,可以有多個相同的例項,也允許多個相同Activity疊加。 - singleTop
可以有多個例項,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會建立新的例項,而會呼叫其onNewIntent方法。 - singleTask
只有一個例項。在同一個應用程式中啟動他的時候,若Activity不存在,則會在當前task建立一個新的例項,若存在,則會把task中在其之上的其它Activity destory掉並呼叫它的onNewIntent方法。
如果是在別的應用程式中啟動它,則會新建一個task,並在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的例項中再開啟新的Activity,這個新的Activity還是會在singleTask的例項的task中 - singleInstance
只有一個例項,並且這個例項獨立執行在一個task中,這個task只有這個例項,不允許有別的Activity存在。
啟動方式清晰日誌列印Demo參考
為什麼會記憶體洩露?
因為有很多持有引用,沒有被GC所及時回收,我們也沒有去處理。或者GC無法回收。會導致記憶體洩露。本文所提及的記憶體洩露為Intent物件沒有回收的問題(該處記憶體洩露問題介紹簡單,有需要了解更多的請移步http://blog.csdn.net/ch1406285246/article/details/61618963).
如何解決該記憶體洩露問題
請大家再仔細看一下四大啟動方式的第一個我加了預設兩個字,第一種啟動方式是當我們不設定啟動方式的時候預設的啟動方式,它的缺點就是每次都會建立新的例項,那麼因為GC沒有及時回收,就是記憶體洩露問題,我們可以根據自己的業務需求改為其他三種啟動方式,然後在onNewIntent()進行頁面的初始化操作就OK了。