您的位置:首页 > 移动开发 > Android开发

[Android设计模式]Android退出应用程序终极方法

2016-12-30 11:08 453 查看



如何干净彻底地退出Android应用程序,是很多开发者的心头痒。如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实现对Application的扩展,实现了一种高效管理Activity,实现Android干净彻底地退出应用程序。

 
首先,我们将管理Activity的功能通过一个扩展的Application类来实现。

 

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 获取当前Activity(栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}

/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
i
b06c
f (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}

/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}

/**
* 结束所有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();
}

/**
* 退出应用程序
*/
public void AppExit() {
try {
finishAllActivity();
} catch (Exception e) {
}
}

}


 

注意,为了在我们自己的应用程序中使用这个自定义的Application类,而不是默认的Application类。需要在Manifest文件中修改一下<Application>的属性( android:name)
例如:

 

1 <application
2    android:icon="@drawable/icon"
3    android:label="@string/app_name"
4    android:name="your_package_name_here.MyApplication">


 

使用方法:
方法1: 之后我们在所有的activity的oncreate方法中通过getinstance得到一个MyApplication的实例,然后调用addActivity方法把当前的activity加入到stack中,如果要退出应用程序只需要调用AppExit方法即可。
方法2: 自定义一个继承Activity类的BaseActivity

 

1 public class BaseActivity extends Activity{
2     @Override
3     protected void onCreate(Bundle savedInstanceState){
4         super.onCreate(savedInstanceState);
5         //添加Activity到堆栈
6         MyApplication.getInstance().addActivity(this);
7     }
8
9     @Override
10     protected void onDestroy(){
11         super.onDestroy();
12         //结束Activity&从栈中移除该Activity
13         MyApplication.getInstance().finishActivity(this);
14     }
15
16 }


 

后续的Activity 都集成这个BaseActivity就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: