这里介绍两种方法:一种把每个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)这个必须要加,不然会出一堆错,找了个最简单的方法。

activity退出的更多相关文章

  1. [Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?

    首先,问题是如何出现的? 晚上复查代码,发现一个activity没有调用自己的ondestroy方法 我表示非常的费解,于是我检查了下代码. 发现再finish代码之后接了如下代码 finish(); ...

  2. 退出Activity(转)

    退出Activity 如何退出Activity?如何安全退出已调用多个Activity的Application? 退出activity 直接调用 finish () 方法 . //用户点击back键  ...

  3. Activity进入与退出的动画

    1.在res建立目录anim放入动画效果xml文件 1.1   进入文件  push_left_in.xml <?xml version="1.0" encoding=&qu ...

  4. 如何退出Activity?如何安全退出已调用多个Activity的Application?

    如何退出Activity?如何安全退出已调用多个Activity的Application? 退出Activity直接调用finish()方法  //用户点击back键就是退出一个Activity 退出 ...

  5. 如何安全退出已调用多个Activity的Application?

    如何退出Activity?如何安全退出已调用多个Activity的Application? 退出Activity直接调用finish()方法  //用户点击back键就是退出一个Activity 退出 ...

  6. 转: WebView载入一个网页 但是退出对应的activity时, 声音、视频无法停止播放 解决方案(未验证)

    1. webview.onPause 2. webview独立进程,杀进程3.小场景可以不用这么复杂有个技巧就是在activity退出的时候加载一个空白页面,就能解决

  7. Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...

  8. 基础总结之Activity

    一.万事开头的序 网上看见大牛们的博客写的那样精彩,各种羡慕之情溢于言表.几次冲动均想效仿牛人写些博客来记录下自己的心得体会,但均无感亦或是感觉容易被喷,相信很多菜鸟和我一样都有过这样的担忧.万事开头 ...

  9. Activity生命周期

    在开始之前我们先了解一下什么是Activity: 直接翻译为:"活动",而在Android中更多的是代表手机的屏幕,是Android的四大组件之一,重要的组成单元,提供了与用户交互 ...

随机推荐

  1. Restfull API 示例

    什么是Restfull API Restfull API 从字面就可以知道,他是rest式的接口,所以就要先了解什么是rest rest 不是一个技术,也不是一个协议 rest 指的是一组架构约束条件 ...

  2. samba配置只读共享

    编辑smb.conf 1.在[global]中 找到 security = 将其改为 security = share 2. 在文件中加入自定义的共享目录 [attachment] path=/dat ...

  3. Mock框架

    MoQ(基于.net3.5,c#3.0的mock框架)简单介绍 - 你听海是不是在笑 - 博客园 http://www.cnblogs.com/nuaalfm/archive/2009/11/25/1 ...

  4. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  5. c# 可以设置透明度的 Panel 组件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  6. 【并发编程】Executor类的继承结构

    来自为知笔记(Wiz)

  7. 使用仓库管理器——Sonatype Nexus的九大理由

    目前有很多组织使用了一些工具依赖于Maven仓库,但他们并没有采用一个仓库管理器,对于这一点我十分惊讶.可能没人提出来这一点,没人站出来告诉别人使用一个仓库管理器能带来什么好处.我经常能从很多不使用M ...

  8. CentOS7安装Oracle 11g R2 详细过程——零基础

    本人linux小白,因项目原因必须要在linux下使用oracle便开始了探索.安装过程中遇到了种种问题与原因,今天整理一下方便后面的可以少走弯路. *注明: 安装过程注意当前错作的用户,执行./ru ...

  9. c++ 迭代器库

    来自http://zh.cppreference.com/w/cpp/iterator 迭代器库提供了5种迭代器的定义,同时还提供了迭代器特征.适配器及其相关的工具函数. 迭代器共有5种:InputI ...

  10. 【转】SQL SERVER 存储过程中变量的作用域

    今天遇到一个很有趣的事情,以前没有注意过,所以记下来. 先来看例子. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE ...