1. 程式人生 > >一鍵退出一個app中所有activity

一鍵退出一個app中所有activity

這幾天在Android的開發過程中遇到了這麼樣一個問題,當App中擁有多個Activity時,如A,B,C三個。

在A->B後,若想在B中直接退出APP,呼叫System.exit(0)或者android.os.Process.killProcess(android.os.Process.myPid()) 均不能完全退出App。

研究後,這個和Android UI的棧設計有關。

若想要退出整個APP,必然需要將整個棧中存放的Activity每個殺掉。根據這個思路,就有了這麼兩種解決辦法:

一:

定義一個父類Activity,讓所有自己定義的Activity繼承該父類Activity,在父類Activity中定義一個廣播接收器。當需要關閉所有Activity時,直接傳送廣播。父類Activity接收到後將所有Activity全部關閉。

二:

利用一個外部類application,把所有開啟的activity都放在一個list裡面,當點選退出的時候遍歷list,然後一個一個的結束掉。

經過本人試驗,第二種方法的可靠性更高。貼上邏輯演算法

public class ExitApplication extends Application {  
private List<Activity> activityList=new LinkedList<Activity>(); 
private static ExitApplication instance;
private ExitApplication(){} 
//單例模式獲取唯一的exitapplication 
public static ExitApplication getInstance(){ 
if(null==instance){   
instance=new ExitApplication(); 
}  
return instance; 
} 
//新增activity到容器中 
public void addActivity(Activity activity){  
activityList.add(activity); 
} 
//遍歷所有的Activiy並finish 
public void exit(){    
for(Activity activity:activityList){   
activity.finish();  
}  
System.exit(0); 
}
}

然後,在每個activity的oncreat方法裡面加上這句ExitApplication.getInstance().addActivity(this); 
一鍵退出
ExitApplication.getInstance().exit();

歸根結底,兩種方法都是利用變通的辦法退出APP,UI類的棧是不能直接銷燬的,只能控制入棧出棧