android sdk 退出机制的研究 有多种,

方法一、用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方法中添加类似代码:

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方法

方法二、使用广播

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(); }...}

这就是 我对android中的activity的退出机制的总结.

在以后的教程中,我们将一步步实现这样的效果.

更多相关文章

  1. Android(安卓)APP无法接收开机广播
  2. Android点击两次返回键,退出应用程序
  3. Android广播的一些事
  4. Android广播的一些事
  5. QT Creator 构建android apk失败问题
  6. Android(安卓)中的消息传递,详解广播机制
  7. [置顶] Android按返回键退出程序但不销毁
  8. Android(安卓)中的消息传递,详解广播机制
  9. android broadcastReceiver生命周期及两种应用——四大组件之Bro

随机推荐

  1. Android(安卓)语言资源库的添加
  2. Android核心分析(21)----Android应用框架之
  3. Android Logging
  4. android gridview 行高设置
  5. Android Studio(一):介绍、安装、配置
  6. 2010.12.13——— android listView 滚动
  7. android之显示Log
  8. Android将使用OpenJDK
  9. 2011.11.25——— android ndk 坑爹的cyg
  10. xutils使用手册(一)——初始化