为Android程序引入“关闭程序”机制

来源:互联网 发布:csr 蓝牙芯片 mac地址 编辑:程序博客网 时间:2024/06/05 10:59
 

首先声明一下:这里所说的“关闭程序”是像在windows任务管理器中关闭进程一样的效果。

现在在网上流传的解决方案主要有两类(三种):

第一类:调用系统API直接结束进程,即调用“killProcess”或者“System.exit”。首先我在实验时,这两种方法根本不能工作,这和finish()的效果一样,只是使当前正在运行的界面关闭。

第二类:这个解决方案已经比较接近我的解决方式了,没有特别的坏处,只是这种每次调用Intent都清掉其他的Activity的方式不太灵活,而且整个代码的设计也不太好(通过一个Activity结束其他的Activity,有点破坏封装)。

所以,现在开始介绍我的方案:

那么就来说说思路:Android的原生退出机制其实是当所有的Activity都finish以后,它的主程序就退出了(并不影响后台service)。而不知道什么原因,它没有提供直接退出的API。另外,在Android中,一个比较糟糕的设计,就是“返回键”的原生作用——从Activity的历史栈中将下一个Activity调出来。如果我们任由这样的返回键胡乱非为,就很可能打乱整个程序的业务逻辑——返回到过期页面。因此我的整个解决方案的主要思想是:提供对所有打开的Activity的管理机制

现在为大家呈上代码:

public class KillProgress extends Activity {
 public static List<Activity> activity = new ArrayList<Activity>();

   @Override
   protected void onCreate(Bundle savedInstanceState)
   {
  
    super.onCreate(savedInstanceState);
   //将activity添加到List中
    activity.add(this);
   }
  
    @Override
   protected void onDestroy()
   {
  
  super.onDestroy();
  //从List中将activity去除
     activity.remove(this);
 
   }
   
   public  void killMyProcess()
   {
 
    for (Activity activitys : activity)
    {
     activitys .finish();
    }

    android.os.Process.killProcess(android.os.Process.myPid());
   
   }
}

 

想要实现上面说的功能只需使你写的项目的所有Activity都继承这个类即可。

在《java编程思想》这本书中提到:如果一个类的继承层级超过2层,那么你的设计就很有可能有一定的问题,我们可以看看Activity的继承在此其继承层次超过了两层。

 

原创粉丝点击