本文主要介绍两种方式退出APP,一种是基于Activity的启动模式singleTask模式实现的,一种是基于全局Activity管理类实现的。强烈推荐第一种方法实现,简单又方便。
说下环境:MainActivity跳转到FirstActivity,FirstActivity跳转到secondActivity,在secondActivity中退出程序。
首先,将MainActivity的launchMode改为singleTask,如下
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
其次 实现MainActivity中的onNewIntent方法,实现退出APP的逻辑。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String tag = intent.getStringExtra("EXIT_TAG");
if (tag != null&& !TextUtils.isEmpty(tag)) {
if ("SINGLETASK".equals(tag)) {//退出程序
finish();
}
}
}
这里面的tag用来标识关闭app的,在secondActivity中退出APP调用startActivity的时候需要传入。
现在就看下secondActivity中相关代码
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("EXIT_TAG", "SINGLETASK");
startActivity(intent);
通过这三步就解决了安全退出APP的问题,现在很多人都在用,你还在等啥。
说下环境:MainActivity跳转到FirstActivity,FirstActivity跳转到secondActivity,在secondActivity中退出程序。
首先创建一个全局的Activity管理类 ActivityManager,里面有添加Activity,移除Activity,关闭activitys。ActivityManager的单例是用静态内部类实现的。贴下ActivityManager的全部代码
package com.appexit.util;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Author:wang_sir
* Time:2018/6/7 20:15
* Description:This is ActivityManager
*/
public class ActivityManager {
private List activityList = new ArrayList<>();
private ActivityManager() {
}
public static ActivityManager getInstance() {
return ActivityManagerHolder.Instantce;
}
/**
* 静态内部类获取单例
*/
static class ActivityManagerHolder {
public static ActivityManager Instantce = new ActivityManager();
}
/**
* 添加activity
* @param activity
*/
public void addActivity(Activity activity){
if (!activityList.contains(activity)) {
activityList.add(activity);
}
}
/**
* 移除activity
* @param activity
*/
public void removeActivity(Activity activity){
if (activityList.contains(activity)) {
activityList.remove(activity);
}
}
/**
* 关闭所有的activity,退出应用
*/
public void finishActivitys(){
if (activityList != null&&!activityList.isEmpty()) {
for (Activity activity1 : activityList) {
activity1.finish();
}
activityList.clear();
}
}
}
其次是创建一个BaseActivity,所有的Activity都继承这个BaseActivity,在BaseActivity中实现添加Activity和移除Activity的操作,看代码
package com.appexit;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import com.appexit.util.ActivityManager;
import java.lang.ref.WeakReference;
/**
* Author:wang_sir
* Time:2018/6/7 20:11
* Description:This is BaseActivity
*/
public class BaseActivity extends AppCompatActivity {
private WeakReference weakReference = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将activity添加到列表中
if (weakReference==null) {
weakReference = new WeakReference(this);
}
ActivityManager.getInstance().addActivity(weakReference.get());
}
@Override
protected void onDestroy() {
super.onDestroy();
//将activity从列表中移除
ActivityManager.getInstance().removeActivity(weakReference.get());
}
}
这里用到了弱引用,目的防止内存泄漏,因为ActivityManager有Activity的引用。
当需要退出应用的时候直接调用ActivityManager中的关闭Activity的方法即可,看下secondActivity中的相关代码
ActivityManager.getInstance().finishActivitys();
至此两种安全退出APP的方法总结完了,都挺实用的,个人感觉还是第一种方法好。
Demo地址:https://github.com/DevelopWb/AppExit.git