發(fā)布者:admin 發(fā)布時(shí)間:2019-08-18 人氣:3145
如何干凈徹底地退出Android應(yīng)用程序,是很多開發(fā)者的心頭癢。如何干凈地關(guān)閉所有已打開的Activity? 如何關(guān)閉指定的Activity? 如何關(guān)閉一類Activity? 這里,我們提出一種通過實(shí)現(xiàn)對Application的擴(kuò)展,實(shí)現(xiàn)了一種高效管理Activity,實(shí)現(xiàn)Android干凈徹底地退出應(yīng)用程序。
首先,我們將管理Activity的功能通過一個(gè)擴(kuò)展的Application類來實(shí)現(xiàn)。
public class MyApplication extends Application {
private static Stack<Activity> activityStack;
private static MyApplication singleton;
@Override
public void onCreate()
{
super.onCreate();
singleton=this;
}
// Returns the application instance
public static MyApplication getInstance() {
return singleton;
}
/**
* add Activity 添加Activity到棧
*/
public void addActivity(Activity activity){
if(activityStack ==null){
activityStack =new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* get current Activity 獲取當(dāng)前Activity(棧中最后一個(gè)壓入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 結(jié)束當(dāng)前Activity(棧中最后一個(gè)壓入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 結(jié)束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 結(jié)束指定類名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 結(jié)束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出應(yīng)用程序
*/
public void AppExit() {
try {
finishAllActivity();
} catch (Exception e) {
}
}
}
注意,為了在我們自己的應(yīng)用程序中使用這個(gè)自定義的Application類,而不是默認(rèn)的Application類。需要在Manifest文件中修改一下<Application>的屬性。
使用方法:
方法1: 之后我們在所有的activity的oncreate方法中通過getinstance得到一個(gè)MyApplication的實(shí)例,然后調(diào)用addActivity方法把當(dāng)前的activity加入到stack中,如果要退出應(yīng)用程序只需要調(diào)用AppExit方法即可。
方法2: 自定義一個(gè)繼承Activity類的BaseActivity:
后續(xù)的Activity 都集成這個(gè)BaseActivity就可以了。