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()方法退出应用。




  • 相关阅读:
    shell (3) 磁盘挂载
    QByteArray 内存拷贝异常
    记录QTextEdit
    QTableWidget 使用
    QT 读写xml
    远程工具长时间待机断网解决办法
    qt读写json文件
    QT 资源文件(.qrc)
    error: C1041: 无法打开程序数据库“E:ProjectQtuild-QCaculator-Desktop_Qt_5_14_1_MSVC2017_32_bit-DebugdebugQCaculator.vc.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS
    Vs2019+Qt5.14环境配置,安装qt visual studio tools报错。
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7251308.html
Copyright © 2011-2022 走看看