如何管理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開發諮詢 |