Android完全退出程序

来源:互联网 发布:淘宝批量上架宝贝 编辑:程序博客网 时间:2024/06/02 14:31

众所周知  android程序如果正常退出  会在后台继续运行

这个android的activity栈有关系  他不显示  并不代表结束

现在基本都是在做2.3以上的开发  所以  用系统的杀死当前包中activity的方式不行了

现在为大家推荐几种全局退出方法  亲测可行  都是在开发中用到过的

 一、记录打开过的activity,然后在退出的时候   遍历数组 关闭

public class ExitUtil { //定义一个activity列表    private List<Activity> mList = new ArrayList<Activity>();        //顶一一个类的实例    private static ExitUtil instance;         //私有构造方法 不允许创建类的实例    private ExitUtil() {       }     /**     * 单例模式     * @return     */    public  static ExitUtilgetInstance() {         if (null == instance) {             instance = new ExitUtil();         }         return instance;     }          /**     * 如果activity已经 destory了 就移除     * @param activity     */    public  void remove(Activity activity){               mList.remove(activity);                  }       /**     * 添加ativity     * @param activity     */    public void addActivity(Activity activity) {         mList.add(activity);     } /** * 遍历  结束activity  并且退出 */    public void exit() {         try {             for (Activity activity : mList) {                 if (activity != null)                     activity.finish();             }                     } catch (Exception e) {             e.printStackTrace();         } finally {         android.os.Process.killProcess(android.os.Process.myPid());               System.exit(0);         }     } }

一般推荐在写程序的时候,自己顶一个commonactivity  继承activity  作为自己activity的父类 

这样比较方便  你可以在自己的commonactivity中调用一下退出类的添加和移除方法 比较方便

@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubExitUtil.getInstance().addActivity(this);super.onCreate(savedInstanceState);}


 

@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();ExitUtil.getInstance().remove(this);}


这样  在退出的界面中  调用下exit方法就可以了

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// 按下键盘上返回按钮if (keyCode == KeyEvent.KEYCODE_BACK) {new AlertDialog.Builder(this).setTitle("提示").setMessage("确认退出").setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {}}).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {//closed();ExitUtil.getInstance().exit();}}).show();return true;} else {return super.onKeyDown(keyCode, event);}}    


这样  就可以成功的退出

二、广泛采用的  采用广播退出的方法

也是在自己定义的commoactivity中   注册个广播 如果接到广播 结束activity

public BroadcastReceiverbroadcastReceiver = new  BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubfinish();}};

这个需要在onresume中注册广播  这里的GlobalVarable.EXIT_ACTION是自己定义的一个action

@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();IntentFilter filter = new IntentFilter();  filter.addAction(GlobalVarable.EXIT_ACTION);
this.registerReceiver(this.broadcastReceiver, filter);
}


需要注意的是  要在ondestory中解除注册 否则会报异常

@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();this.unregisterReceiver(broadcastReceiver);}


 

然后 在退出的时候调用close方法发送广播
private void closed(){Intent intent = new Intent();intent.setAction(GlobalVarable.EXIT_ACTION); // 退出动作this.sendBroadcast(intent);// 发送广播super.finish();//退出后台线程,以及销毁静态变量System.exit(0);}

三、定义一个 MyApplication extends Application 在MyApplication中定义一个全局变量

private boolean isExit = false;
 public boolean isExit() {
  return isExit;
 }
 public void setExit(boolean isExit) {
  this.isExit = isExit;

并且在commonactivity中的onsatrt方法中判断  如果为true就关闭当前activity

@Overrideprotected void onStart() {// TODO Auto-generated method stub MyApplication application = (MyApplication) this.getApplication(); if(application.isExit()==true){ this.finish(); }super.onStart();}

 

如果需要退出  则在当前界面中将isExit设为True并且结束当前activity  就可以退出所以activity

值得注意的是 如果想要MyApplication起作用 需要在配置文件中的Application设置成自己的MyApplication

因为系统默认的是Application

 

 

如果不懂  欢迎留言咨询

 

欢迎加群:169146045  一起聊天打屁  在闲暇时间聊天  在忙碌时间探讨技术


 

原创粉丝点击