編輯:關於Android編程
初看這個博文名,我都蒙蔽了,Activity的啟動模式居然能扯到內存問題,還有內存洩漏問題,
WTF!!!不要方,小司機我帶你理解和稍微深入的探討一下Activity的四種啟動模式對內存的影響和在何種情況下應該使用這四大法王之一呢?
不寫Demo,你就聽我說就行了。
Activity的啟動方式有四種:
standard singleTop singleTask singleInstance
講解啟動模式之前有必要先講解一下“任務棧”的概念;
任務棧
每個應用都有一個任務棧,是用來存放Activity的,功能類似於函數調用的棧,先後順序代表了Activity的出現順序;比如打開ActivityYa–>ActivityMai–>ActivityDai,則任務棧相應的順序圖為:
接著我們來設置Activity的啟動模式只需要在AndroidManifest.xml裡對應的標簽設置Android:launchMode屬性,例如:
啟動模式解析:
每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧;
默認模式,可以不用寫配置。在這個模式下,都會默認創建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加(記住,可以允許疊加,就代表可以重復創建此Activity)。
示例如下圖:
假如我點擊了Activity1中的按鈕1和按鈕2(牛逼的人在瞬間同時點擊,暫不考慮後退的問題了):
如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。
示例如下圖:
假如我點擊了Activity1中的按鈕1和按鈕2(牛逼的人在瞬間同時點擊,暫不考慮後退的問題了):這次點擊按鈕1,因為棧頂存在Activity1,所以不會重復創建,如果不是棧頂,則會創建。
如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧(銷毀)。如果棧中不存在該實例,將會創建新的實例放入棧中。
示例如下圖:
假如我點擊了Activity1中的按鈕1和按鈕2,又點了按鈕1(牛逼的人在瞬間順序點擊而不發生跳轉,暫不考慮後退的問題了):
在一個新棧中創建該Activity實例,並讓多個應用共享該棧中的該Activity實例。一旦該模式的Activity的實例存在於某個棧中,任何應用再激活該Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。
假如我點擊了Activity1中的按鈕1(只點擊了按鈕1):
APP1啟動App的Activity1,APP2啟動App的Activity1(在剛才的點擊基礎上),那麼APP1和APP2都會啟動任務棧2的Activity1。
先寫到這裡,明天再更新,要休息啦!
有時候我們拿到一張背景圖片,客戶要求點擊圖片的不同區域去跳轉或者實現不同的操作事件。我們首先要確認圖片的點擊區域,往往我們會在布局文件那裡下手,但是這樣不好做適配,所以我
Android基礎入門教程——2.4.8 ListView Item多布局的實現標簽(空格分隔): Android基礎入門教程本節引言: 本節是L
關於ListView拖拽移動位置,想必大家並不陌生,比較不錯的軟件都用到如此功能了.如:搜狐,網易,百度等,但是相比來說還是百度的用戶體驗較好,不偏心了,下面看幾個示例:
ToggleButton可以認為是一個開關,每單擊依次一次在“開”和“關”之間進行切換。 ToggleButto
(一)前言今天我們一起來看一下ViewPagerAndroid組件完成解