Android 关闭多个Activity
来源:互联网 发布:蝴蝶效应 知乎 编辑:程序博客网 时间:2024/05/16 17:40
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 Activitypublic 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); }}@Overridepublic 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)这个必须要加,不然会出一堆错,找了个最简单的方法。
感谢原作者 http://www.cnblogs.com/yejiurui/archive/2012/12/30/2839463.html
0 0
- Android 关闭多个Activity
- Android关闭多个activity
- android 多个activity关闭问题
- Android 关闭多个Activity总结
- Android开发之关闭多个Activity
- android程序退出关闭多个activity
- Android中同时关闭多个Activity
- Android中一个Activity关闭另一个Activity或者在一个Activity中关闭多个Activity
- 关闭多个activity
- android 退出时 同时关闭多个activity
- 利用Android广播机制关闭多个activity
- Android 关闭多个activity Intent.FLAG_ACTIVITY_CLEAR_TOP用法
- Android总结(1)---如何关闭多个Activity
- (转)Android开发之关闭多个Activity
- 一次关闭多个Activity
- 一次关闭多个Activity
- 一次关闭多个Activity
- Android中 在开启的多个Activity中关闭特定的Activity的方法
- 注册功能实现
- ZOJ.2829 Beautiful Number【水】 2015/09/22
- 友善之臂第一个裸板驱动LED程序的详细分析(新手向)
- 【学习笔记】系列二:Linux安装配置apache
- document.addEventListener理解
- Android 关闭多个Activity
- 函数执行过程的博大精深,表示不懂啊
- Jquery控制文字横向移动
- orcacle 解决违反约束问题
- Ecmall MySql 数据库调用教程
- 第四周项目三(3)
- iOS8 用UITableViewRowAction实现Cell自定义滑动操作
- The entity name must immediately follow the '&' in the entity reference
- Sql Server参数化查询之where in和like实现详解