前言:目前在app中主流的退出应用的方式有两种,一种是弹出提示框,另外一种则是主流的双击退出。今天整理了一下相关代码,编写一个小demo整理了几种退出方式。
在安卓中,监听返回键有两种方式,分别是onKeyDown与onBackPress,我定义四种实现方式如下:
方法一,onBackPress处理,双击退出
方法二,onKeyDown双击退出
方法三,onBackPress并调用系统提示框
方法四,onKeyDown调用自定义弹出框
主界面MainActivity代码如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn1,R.id.btn2, R.id.btn3, R.id.btn4}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn1: startActivity(1); break; case R.id.btn2: startActivity(2); break; case R.id.btn3: startActivity(3); break; case R.id.btn4: startActivity(4); break; } } private void startActivity(int i) { switch (i){ case 1: Intent intent1 = new Intent(MainActivity.this,ExitActivity1.class); intent1.putExtra("text","方法一"); startActivity(intent1); finish(); break; case 2: Intent intent2 = new Intent(MainActivity.this,ExitActivity2.class); intent2.putExtra("text","方法二"); startActivity(intent2); finish(); break; case 3: Intent intent3 = new Intent(MainActivity.this,ExitActivity3.class); intent3.putExtra("text","方法三"); startActivity(intent3); finish(); break; case 4: Intent intent4 = new Intent(MainActivity.this,ExitActivity4.class); intent4.putExtra("text","方法四"); startActivity(intent4); finish(); break; } } }
四种退出方式的实现逻辑代码:
方法一
@Override public void onBackPressed() { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 6200) { Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); firstTime = secondTime; } else { System.exit(0); } }
方法二
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { long secondTime = System.currentTimeMillis(); if (secondTime - firstTime > 6200) { Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); firstTime = secondTime; return true; } else { System.exit(0); } } return super.onKeyDown(keyCode, event); }
方法三
@Override public void onBackPressed() { AlertDialog.Builder builder = null; builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("确定退出应用?"); builder.setCancelable(true); // 将对话框设置为可取消 // 给按钮添加注册监听 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击按钮所调用的方法 System.exit(0); } }); builder.setNegativeButton("取消",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击按钮所调用的方法 } }); builder.show(); }
方法四
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { String msg = "是否确定退出应用\n否则取消"; new NotificationDialog(this,null, msg, null,new NotificationDialog.DialogCallBack() { @Override public void onResult(boolean confirmed, Bundle bundle) { if(confirmed){ System.exit(0); }else{ } } }, true).show(); } return super.onKeyDown(keyCode, event); }
PS:除了今天的主角退出APP外,代码中还涉及到了Activity之间利用Intent进行传值,传输与接送代码如下:
intent1.putExtra("text","方法一");
String text = getIntent().getStringExtra("text"); tv.setText(text);
最后,项目地址