Android完全退出程序

众所周知  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中调用一下退出类的添加和移除方法 比较方便

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		ExitUtil.getInstance().addActivity(this);
		super.onCreate(savedInstanceState);
			
	}


 

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		ExitUtil.getInstance().remove(this);
			}


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

	@Override
	public 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 BroadcastReceiver	broadcastReceiver = new  BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			finish();
		}
	};

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

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


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

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.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

	@Override
	protected 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  一起聊天打屁  在闲暇时间聊天  在忙碌时间探讨技术


 

你可能感兴趣的:(android,exception,filter,application,dialog,action)