您的位置:

Android退出应用的完整解决方案

一、使用系统Back键实现退出应用

Android的系统Back键是应用退出的常用方式,通过重写Activity的onBackPressed()方法可以实现在Back键按下时退出应用。

@Override
public void onBackPressed() {
    moveTaskToBack(true);
    super.onBackPressed();
}

这里调用了moveTaskToBack(true)使应用进入后台,而后调用super.onBackPressed()正常将应用退出。需要注意的是,如果在Activity跳转时不会调用onBackPressed()方法,如果需要在此时退出应用,需在跳转代码中添加finish()方法。

二、使用系统Home键实现退出应用

实现使用系统Home键退出应用的方式相对简单,只需在退出应用前调用System.exit(0)方法即可,但不建议使用该方法,因为其方式过于粗暴。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_HOME){
        System.exit(0);//退出应用
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

三、利用广播机制实现退出应用

通过应用内自定义广播,在接收到广播时退出应用,相对于前两种方法,该方法更加安全可控。

首先在Mainfest文件中注册广播接收器:

<receiver android:name=".ExitReceiver">
    <intent-filter>
        <action android:name="exit_app" />
    </intent-filter>
</receiver>

然后定义广播接收器,实现退出应用的操作:

public class ExitReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("exit_app")){
            ((Activity)context).finish();
        }
    }
}

最后,在需要退出应用的地方发送该广播:

Intent intent = new Intent("exit_app");
sendBroadcast(intent);

四、使用Dialog确认退出应用

为避免用户误操作,可在退出应用前使用Dialog提示用户,让用户确认是否退出应用。

首先定义Dialog,代码如下:

private void showExitDialog(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("提示")
            .setMessage("是否退出应用?")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finishAll();
                }
            })
            .setNegativeButton("取消", null)
            .create()
            .show();
}

然后在需要退出应用的地方调用该Dialog即可:

showExitDialog();

需要注意的是,finishAll()方法是在BaseActivity中自定义实现的,用于结束所有Activity。

五、结合双击Back键实现退出应用

为提供更加灵活的退出方式,可考虑结合双击Back键实现退出应用。

首先需要定义变量记录点击的时间:

private long mExitTime = 0;

然后在onBackPressed()方法中判断时间是否超过2秒,如果超过则重置mExitTime,否则退出应用:

@Override
public void onBackPressed() {
    if((System.currentTimeMillis() - mExitTime) > 2000){
        Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show();
        mExitTime = System.currentTimeMillis();
    }
    else{
        finishAll();
    }
}

六、总结

本文分别介绍了五种Android退出应用的实现方式,分别是使用系统Back键、使用系统Home键、利用广播机制、使用Dialog确认、结合双击Back键。每种方式都有各自的优缺点,根据应用实际情况选择适合的方式。