2011-10-14 113 views
0

我的活動我有登錄頁面(L),這導致活動層次(L - > A - > B - > C)。當用戶登錄後,他進入活動C,他最小化了他的應用程序,過了一段時間,系統會在這個應用程序上執行一個關閉操作。Android - 登錄並重新登錄

現在,當他再次啓動這個應用程序時,他應該看到,上次應用程序運行時所有打開的活動都在堆棧中運行(如果他在C中,則一個後退按鈕導致B,然後到A,然後到L)。如何在Android中實現這樣的行爲?我現在使用的是sharedpreference,這是對已訪問活動的字符串進行處理,然後是一些標誌,它告訴我一個應用程序是用System close還是user close完成的,而他們是用自己的sharedpreference來持久化每個活動。如果系統殺死我的應用程序,登錄後我在For循環中打開一系列過去打開的活動,但它們只在堆棧中。只有當我使用後退按鈕才能看到它們時,纔會打開它們(=運行onCreate方法)。

您是否看到更清潔的方法?

感謝

回答

0

當我想保持力之後層次接近我用它調用,然後覆蓋背面事件做同樣的反向的一個替換每個活動繞過活動堆棧。

在ActivityL.java,在那裏你想去ActivityA:

Intent intent = new Intent(getApplicationContext(), ActivityA.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
finish(); 

現在,您只需要在堆棧上一個活動 - ActivityA。有後退按鈕舉止得體,並返回到ActivityL,這增加ActivityA:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(getApplicationContext(), ActivityL.class) 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
    finish(); 
} 

你仍然需要存儲足夠的狀態信息,讓你回來到用戶是力之前關閉活動。在ActivityL的onCreate中,檢查狀態信息以確定您希望用戶打開哪個視圖,並使用類似於上面第一個塊的代碼直接進入。

這似乎比在啓動時重建整個活動堆棧更清潔。但是,如果您的活動不遵循嚴格的等級制度,則這會變得更加複雜。 (即有時活動A開始活動B,有時開始活動C)。

+0

THANKs,但這意味着只有一個活動剩餘在堆棧上,這對我來說不合適 – Waypoint

+0

請問爲什麼?從這個解決方案的角度來看,堆棧只是一個實現細節。我用這種方法維護一個任意大小的「虛擬」堆棧,用戶體驗與標準活動堆棧上的多個開放活動無法區分。 – goto10

+0

是的,但對我來說是不合適的,因爲我的商業應用會很繁重。對於較小的應用程序,我認爲這是可用的 – Waypoint