Android 应用程序的隐藏与退出

 

实现按Home键时隐藏程序的效果:

1:Android 2.0之前需要监听按键事件,进行判断是不是按下了back键

2:Android 2.0之后系统提供了一个onBackPressed方法,这个方法就是专门用来监听back键事件的,所以只需重写onBackPressed方法即可

@Override

public void onBackPressed {

//实现Home键效果

//super.onBackPressed;这句话一定要注掉,不然又去调用默认的back处理方式了

Intent i="" new Intent(Intent.ACTION_MAIN);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

i.addCategory(Intent.CATEGORY_HOME);

startActivity(i);

退出应用程序的实现:可以自己写个方法,例如:

public void exitProgrames{

Intent startMain = new Intent(Intent.ACTION_MAIN);

startMain.addCategory(Intent.CATEGORY_HOME);

startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(startMain);

android.os.Process.killProcess(android.os.Process.myPid);    //    这里也可以用finsh() 只是killProcess杀进程比finsh()更彻底些,finsh()是通过调用Activity的 destoyt()方法来退出! 

还有一种比较流行的Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!
MyApplication类(储存每一个Activity,并实现关闭所有Activity的操作)
public class MyApplication extends Application {

private List<Activity> activityList = new LinkedList<Activity>();
private static MyApplication instance;

            private MyApplication()
            {
            }
             //单例模式中获取唯一的MyApplication实例
             public static MyApplication getInstance()
             {
                            if(null == instance)
                          {
                             instance = new MyApplication();
                          }
                 return instance;            
             }
             //添加Activity到容器中
             public void addActivity(Activity activity)
             {
                            activityList.add(activity);
             }
             //遍历所有Activity并finish
             public void exit()
             {
                          for(Activity activity:activityList)
                         {
                           activity.finish();
                         }
                           System.exit(0);
            }
}
在每一个Activity中的onCreate方法里添加该Activity到MyApplication对象实例容器中
MyApplication.getInstance().addActivity(this);
在需要结束所有Activity的时候调用exit方法
MyApplication.getInstance().exit();

 


我对其他一些退出方法进行的一点介绍和点评(不到之处还请指正):
@restartPackage(getPackageName())  (具体就不介绍了)
我在SDK2.1版本下开发的一款小软件,放到Android2.2或2.3操作系统上无法退出,因为restartPackage方法在SDK2.1以后版本已经被废弃不用了,理由是因为它不安全,可能关闭同其他应用程序共享的Service,而这个Service别人还要用呢,你给别人关了就不对了。

@有人说的终极退出方法:
           Intent startMain = new Intent(Intent.ACTION_MAIN);
           startMain.addCategory(Intent.CATEGORY_HOME);
           startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           startActivity(startMain);
           System.exit(0);
实际上这种方法只是返回了Home页面,如果你再次进入应用,你会发现进入的首界面是你先前没有关闭的Activity。

@ 有人说调用 android.os.Process.killProcess(android.os.Process.myPid());或者System.exit(0)   其实也都是只是退出了当前的activity!

@调用系统隐藏forceStopPackage方法,这里是通过映射调用(也有其他方法)
        Method method = null;
        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        try {
         method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
         method.invoke(manager,getPackageName());
        } catch (Exception e) {
         Log.d("force",e.getMessage());   
        }
我在SDK2.2和2.3的测试结果是,出现NULLPointerException,弹出错误窗口,程序被迫关闭,和预想的正常退出有差别。不过我们可以通过修改基类实现自己的Thread.UncaughtExceptionHandler接口的uncaughtException方法,这样就不会有错误窗口弹出。程序完全退出。

@和上面一样,不过这是故意制造异常退出(上边是无意制造的异常),但我认为这毕竟是下策。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值