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

分享

Android通過Activity棧方式對Activity管理

 命運(yùn)之輪 2012-09-14

  Activity是Android程序的表現(xiàn)層。程序的每一個顯示屏幕就是一個Activity。正在運(yùn)行的Activity處在棧的最頂端,它是運(yùn)行狀態(tài)的。

    當(dāng)有新的Activity進(jìn)入屏幕最上端時,原來的Activity就會被壓入第二層。如果他的屏幕沒有被完 全遮蓋,那么他處于Paused狀態(tài),如果他被遮蓋那么處于Stop狀態(tài)。

    不管處于任何一層,都可能在系統(tǒng)覺得資源不足時被強(qiáng)行關(guān)閉,當(dāng)然關(guān)閉時棧底的程序最先被關(guān)閉。

    譬如:當(dāng)你在程序中調(diào)用 Activity.finish()方法時,結(jié)果和用戶按下 BACK 鍵一樣:他告訴 Activity Manager該Activity實例可以被“回收”。隨后 Activity Manager 激活處于棧第二層的 Activity 并重 新入棧,把原 Activity 壓入到棧的第二層,從 Running 狀態(tài)轉(zhuǎn)到 Paused 狀態(tài)。


在BlackBerry中,提供了一個管理Screen的棧,用來從任何地方來關(guān)閉位于最上一層的Screen,使用UiApplication.getUiApplication().getActiveScreen()來得到位于最上一層的Screen的實例,并且使用UiApplication.getUiApplication().popScreen()來關(guān)閉一個Screen或關(guān)閉當(dāng)前最上一層的Screen,但是Android卻未提供相應(yīng)的功能,只能在一個Activity的對象里面調(diào)用finish來關(guān)閉自己,不能關(guān)閉其他的Activity。比如我們想實現(xiàn)一個功能從屏幕A—>屏幕B—>屏幕C—>屏幕D,然后在在轉(zhuǎn)到屏幕D之前將屏幕B和C關(guān)閉,在屏幕B和屏幕C界面點(diǎn)擊會退按鈕都可以回退到上一個屏幕,但是在屏幕D上點(diǎn)擊會退按鈕讓其回退到A,此外在一些循環(huán)跳轉(zhuǎn)的界面上如果不在合適的地方將一些不需要的屏幕關(guān)閉,那么經(jīng)過多次跳轉(zhuǎn)后回導(dǎo)致內(nèi)存溢出。對此我們可以設(shè)計一個全局的Activity棧,使用這個棧來管理Activity。管理Activity的類的定義如下:

  1. import java.util.Stack; 

    import android.app.Activity; 

    public class ScreenManager { 
    private static Stack activityStack; 
    private static ScreenManager instance; 
    private ScreenManager(){ 

    public static ScreenManager getScreenManager(){ 
    if(instance==null){ 
    instance=new ScreenManager(); 

    return instance; 

    public void popActivity(){ 
    Activity activity=activityStack.lastElement(); 
    if(activity!=null){ 
    activity.finish(); 
    activity=null; 


    public void popActivity(Activity activity){ 
    if(activity!=null){ 
    activity.finish(); 
    activityStack.remove(activity); 
    activity=null; 


    public Activity currentActivity(){ 
    Activity activity=activityStack.lastElement(); 
    return activity; 

    public void pushActivity(Activity activity){ 
    if(activityStack==null){ 
    activityStack=new Stack(); 

    activityStack.add(activity); 


    public void popAllActivityExceptOne(Class cls){ 
    while(true){ 
    Activity activity=currentActivity(); 
    if(activity==null){ 
    break; 

    if(activity.getClass().equals(cls) ){ 
    break; 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多