两种情况下的Android应用退出代码
今天早上帮朋友调试代码,说是退出应用代码无效。细致看了代码,写法上的确没什么问题,于是研究了一下,原因例如以下:
先看两种情况:
(1)public class MainActivity extends TabActivity implements OnCheckedChangeListener
(2)public class MainActivity extends Activity
都是要在MainActivity下退出整个应用,第一种情况主Activity继承自TabActivity,另外一种情况主Activity继承自Activity,这是两者最大的不同,也就是这点差异,能把有效的退出应用代码变的无效。
尽管TabActivity是Activity的间接子类,可是在TabActivity中,OnKeyDown()事件无法获取焦点,由于焦点都在子activity里面,本人亲自做了验证,在(1)情况下。在onKeyDown()处打断点无效,无法进行DeBug调试,但在(2)情况下。能够进入DeBug中。
以下是退出引用程序的代码
(1)情况下适用代码:
 @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
	// TODO Auto-generated method stub
	if (event.getAction() == KeyEvent.ACTION_DOWN &&
		event.getKeyCode() == KeyEvent.KEYCODE_BACK)
	{
	    AlertDialog.Builder builder = new AlertDialog.Builder(this);
	    builder.setMessage("您确定要退出应用?").setTitle("提醒")
		    .setNegativeButton("取消", new DialogInterface.OnClickListener()
		    {
			@Override
			public void onClick(DialogInterface arg0, int arg1)
			{
			    arg0.cancel();
			}
		    }).setPositiveButton("确定", new DialogInterface.OnClickListener()
		    {
			public void onClick(DialogInterface dialog, int id)
			{
			    finish();
			}
		    });
	    AlertDialog alert = builder.create();
	    alert.show();
	    return false;
	}
	return super.dispatchKeyEvent(event);
    }(2)情况下适用代码一:
  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
	if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
	{
	    AlertDialog.Builder builder = new AlertDialog.Builder(this);
	    builder.setTitle("提醒");
	    builder.setMessage("确认退出应用?");
	    builder.setPositiveButton("确定", new OnClickListener()
	    {
		@Override
		public void onClick(DialogInterface arg0, int arg1)
		{
		    intent = new Intent(Intent.ACTION_MAIN);
		    intent.addCategory(Intent.CATEGORY_HOME);
		    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		    startActivity(intent);
		    android.os.Process.killProcess(android.os.Process.myPid());
		}
	    });
	    builder.setNegativeButton("取消", new OnClickListener()
	    {
		@Override
		public void onClick(DialogInterface arg0, int arg1)
		{
		}
	    });
	    builder.show();
	    return true;
	}
	return super.onKeyDown(keyCode, event);
    }
(2)情况下适用代码二:
@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("提示ʾ");
			builder.setMessage("确定要退出应用");
			builder.setPositiveButton("确定", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					// TODO Auto-generated method stub
					finish();
					// System.exit(code);
				}
			});
			builder.setNegativeButton("取消", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					// TODO Auto-generated method stub
				}
			});
			builder.show();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
总之中的一个句话。假设继承的是Activity,就通过OnKeyDown()方法退出程序,假设继承的事TabActivity,就通过dispathKeyEvent()方法退出应用。
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号