如何管理Android中Activity的生命周期?

比如一個註冊流程 a-b-c-d,在最後的d的activity中 點擊確定註冊以後 如果註冊成功就把abcd全部銷毀,在這之前a-b-c-d 都是不銷毀前一個的,因為要保存狀態,防止用戶回退操作,目前的方法是 把abcd4個activity的引用都保存在一個隊列裡面,需要的時候直接操作這些activity的引用來銷毀,但是覺得這種方法並不優雅,請問有更優雅的方法么?


實習的時候寫忘記密碼也遇到相同的問題,說一下我用的方法。

將4步分別寫成4個不同的Layout,佔據屏幕相同的位置,同一時間只有一個Layout處於可見的狀態。通過對應Layout的Visibility來控制當前的步驟。

然後在Activity中監聽返回事件,如果處於最初狀態和完成狀態就直接finish(),處於其他狀態就返回到上一個流程。

這樣做的好處是切換Layout的Visibility比切換Activity速度快,更加順滑。

不知道這樣的做法算不算優雅。


這種情況為何不用fragment?viewflipper也好啊

一個方法,在新棧中開啟abcd,註冊成功返回舊棧,再發消息關閉那幾個activity


Fragment不適用於所有場景,這種情況你需要EventBus


EventBus, 定義FinishActivityEvent

public class FinishActivityEvent {

private Class cls;

public FinishActivityEvent(Class& cls) {
this.cls = cls;
}

public Class getCls() {
return cls;
}

public void setCls(Class cls) {
this.cls = cls;
}

public boolean equalto(Class cls) {
return this.cls.getName().equals(cls.getName());
}
}

需要結束哪個Activity, 就調用

EventBus.getDefault().post(new FinishActivityEvent(LoginActivity.class));

記得在對應的Activity中註冊EventBus,並且添加onEvent方法

public void onEvent(FinishActivityEvent event) {
if (event.equalto(LoginActivity.class)) {
this.finish();
}
}


我天,直接用singleTask就ok了啊,不知道樓上的各位是在糾結啥


我認為,在能不用第三方包的情況下,盡量不使用。這個問題可以簡單通過activity的啟動模式解決,一個應用用會有一個是主的界面吧,這個activity設為singalTask,這個沒問題吧?看你的應用常景,你這裡的a也可以設置成singalTask ,註冊成功,跳到a,這時候b,c,d也就自動銷毀了。在a的onNewIntent來處理接下來的邏輯。按照這個思路,變通下,會找到適合你應用場景的。第一次回答,希望能幫到答主。


用一個自己的stack來管理所有的activiy,要殺要剮隨你處置!


@潘飛 的就是正確答案。使用clear_top結束它上面的Activity即可


使用singletask即可,最簡單。

另外也可以使用startactivitforresult,這個最優雅。

eventbus也是可以的,但是我不怎麼建議。


intent.setFlag,好像是叫clear_Top!,挺長的一名字,忘了,然後就直接startActivity


可以通過集合管理


定義一個broadcast,需要銷毀時發通知,接收到消息的activity自己finish


fragment 你值得擁有


可以把這四個Activity放進一個task棧中,然後如果註冊成功就對第一個activity發Intent,flag設置clear_top和single_top,並且在第一個Activity里重寫onNewIntent方法,接到d傳來的Intent時候銷毀自己


推薦閱讀:

基因越複雜、生命周期越長的生物,進化就越慢嗎?
如何延長遊戲的生命周期?
中國電影市場會不會在 2018 年崩盤?

TAG:Android開發 | 生命周期 | Android | Android工程師 | Android開發諮詢 |