这里介绍两种方法:一种把每个activity记住,然后逐一干掉;另一种思路是使用广播。本文来源于网络,如有雷同,那是必须的。写此贴只是为了总结一下常用东东,还望原作者莫怪,本人真不是想侵权。

方法一、用list保存activity实例,然后逐一干掉
上代码:
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.DialogInterface;
import android.content.Intent;

public class SysApplication extends Application {
private List<Activity> mList = new LinkedList<Activity>();
private static SysApplication instance;

private SysApplication() {
}

public synchronized static SysApplication getInstance() {
if (null == instance) {
instance = new SysApplication();
}
return instance;
}

// add Activity
public void addActivity(Activity activity) {
mList.add(activity);
}

public void exit() {
try {
for (Activity activity : mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}

@Override
public void onLowMemory() {
super.onLowMemory();
System.gc();
}

}
在每个Activity的onCreate方法中添加类似代码:

[java] public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SysApplication.getInstance().addActivity(this);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SysApplication.getInstance().addActivity(this);
}

在需要退出程序的时候,调用:

SysApplication.getInstance().exit();
SysApplication.getInstance().exit();

简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法

附:此方法也可参考链接:http://maosidiaoxian.iteye.com/blog/1404725

方法二、使用广播
2.2退出整个应用难免让人困扰,曾经一度的尝试一下方式:
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(package);
不行

android.os.Process.killProcess(android.os.Process.myPid());
也不行

manager.restartPackage(package);
还是不行

Intent MyIntent = new Intent(Intent.ACTION_MAIN);
MyIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(MyIntent);
finish();
这个只是退回到桌面,如果打开多个Activity关闭重新打开也会有问题,还是还是不行

看到有说广播机制,发现是个好东东,能彻底解决这个问题,废话不说看代码:
public abstract class EnterActivity extends BaseActivity {
...
// 写一个广播的内部类,当收到动作时,结束activity
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错
((Activity) context).finish();
}
};

@Override
public void onResume() {
super.onResume();

// 在当前的activity中注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(Attribute.PAGENAME);
registerReceiver(this.broadcastReceiver, filter); // 注册
}

public void close() {
Intent intent = new Intent();
intent.setAction(Attribute.PAGENAME); // 说明动作
sendBroadcast(intent);// 该函数用于发送广播
finish();
}
...
}

别人写的缺了个地方(unregisterReceiver)这个必须要加,不然会出一堆错,找了个最简单的方法。

最新文章

  1. js 中histroy.back()与history.go()的区别
  2. 一起来做chrome扩展《本地存储localStorage》
  3. bzoj 2751 快速幂
  4. hdu 4432 Sum of divisors(十进制转其他进制)
  5. Linux编程---线程
  6. JS冒泡事件与处理
  7. QT编程环境搭建
  8. 通过映射关系 动态转义为统一格式的数据 (支持 JSON 和 XML )
  9. vue2购物车ch1-(安装依赖、简单配置、 axios获取api的模拟数据)
  10. JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
  11. Charles 连接手机抓包出现Unknown,一直无法抓包的问题解决
  12. Python认识到放弃
  13. Spring-注入
  14. c++之__attribute__((unused))
  15. SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
  16. 常用Javascript集锦【不定期更新】
  17. oracle 拼接字符串的两种方式
  18. RPC簡介
  19. 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结
  20. jQuery基本API小结(下)---工具函数-基本插件

热门文章

  1. git教程,待学习
  2. 日期转换类 DateConverter.java
  3. Photoshop CS3 如何汉化
  4. Linux文件系统Ext2,Ext3,Ext4性能大比拼
  5. Remove LUN from OCFS2
  6. android打印调用栈
  7. poj2352消防站
  8. 黄聪:如何开启IIS7以上的“IIS6管理兼容性”
  9. MongoDB 3.0.6的主,从,仲裁节点搭建
  10. DBA_Oracle Table Partition表分区概念汇总(概念)