zoukankan      html  css  js  c++  java
  • 两种情况下的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()方法退出应用。




  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7251308.html
Copyright © 2011-2022 走看看