android activity棧及狀態

一個task就是一個activity棧,同一個task中能夠保存不一樣app的activityhtml

1. launchMode.net

launchMode在多個Activity跳轉的過程當中扮演着重要的角色,它能夠決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其餘Activity實例公用一個task裏。code

Activity的建立和回收是由系統來管理的,因此不須要人工去建立Activity實例或者銷燬某個Activity實例。htm

默認的launchMode 不論task中是否存在某個Activity的實例都會建立一個新的實例,而且將該實例移到棧的頂部,此時task中可能存在多個Activity實例(但處於不一樣的狀態),當棧頂的實例finish後下面的實例會進入棧頂,並從新進入到運行狀態。blog

http://blog.csdn.net/liuhe688/article/details/6754323生命週期

2. activity狀態及生命週期內存

http://blog.csdn.net/hpoi/article/details/4629065ci

3. intent flagget

http://www.cnblogs.com/xingfuzzhd/archive/2012/12/26/2834078.htmlit

http://www.xuebuyuan.com/1551789.html

結論:更新節目將啓動一個新的activity,若是按照默認,每次更新都將建立一個Activity實例,這將佔用大量的內存,因此咱們須要的行爲是:建立一個Activity實例,每次更新的時候不建立新的實例,只是經過intent通知該實例處理並更新節目。

此時,使用singleTop launchMode或者使用FLAG_ACTIVITY_CLEAR_TOP    + FLAG_ACTIVITY_NEW_TASK 均可以實現這個效果,當調用startacitity時,若是此時棧頂已經有該Activity徳實例,則該實例會觸發onNewIntent(而不是onCreate),此時系統沒有建立新徳Activity實例,只是將intent傳遞給棧頂的實例而已。

4. 利用intent 

FLAG_ACTIVITY_CLEAR_TOP

flag重啓app

http://blog.csdn.net/jack_sivenchen/article/details/51985502

5。 監控activity是否位於棧頂

http://blog.csdn.net/jdsjlzx/article/details/13510011

相關文章
相關標籤/搜索