Android应用调用System.exit后自动重启问题求助
Android应用点击退出确认后自动重启的问题解决方法
我在应用中实现了一项功能:当用户点击返回键(onBackPress)时,会弹出对话框询问是否确认退出应用。用户点击确定后,本应直接关闭应用,但目前应用关闭后会自动重启并回到原界面。我使用的代码如下:
public void popExitDialog(Context context) { final Dialog dialog = new Dialog( context ); dialog.setContentView( R.layout.item_warn_exit ); dialog.getWindow().setBackgroundDrawable( new ColorDrawable( Color.TRANSPARENT ) ); Button Btn_Continue = dialog.findViewById( R.id.btn_Continue ); Button Btn_Cancel = dialog.findViewById( R.id.btn_Cancel ); ImageButton ib_CloseDialog = dialog.findViewById( R.id.ib_CloseDialog ); dialog.show(); ib_CloseDialog.setOnClickListener( v -> { dialog.dismiss(); } ); Btn_Cancel.setOnClickListener( view -> { dialog.dismiss(); } ); Btn_Continue.setOnClickListener( view -> { AppCompatActivity appCompatActivity = new AppCompatActivity(); appCompatActivity.finishAndRemoveTask(); appCompatActivity.finishAffinity(); System.exit( 1 ); } ); }
嘿,我一眼就瞅出问题所在了!你在点击确认退出的时候犯了个关键错误:手动new了一个AppCompatActivity实例。这个新实例根本不是当前正在运行的Activity,它没有绑定到应用的任务栈里,所以你调用finishAndRemoveTask()、finishAffinity()这些方法完全是无效操作,最后用System.exit(1)强制异常退出,反而可能触发系统的进程重启机制,导致应用自动回到原界面。
正确的解决办法:
你需要操作当前正在活跃的Activity实例,而不是新建一个。修改Btn_Continue的点击事件代码即可:
Btn_Continue.setOnClickListener( view -> { // 先判断传入的context是否是Activity实例 if (context instanceof Activity) { Activity currentActivity = (Activity) context; // 关闭所有关联的Activity,清空任务栈 currentActivity.finishAffinity(); // 移除当前任务栈,避免系统重启后回到原界面 currentActivity.finishAndRemoveTask(); // 正常退出进程,用0表示正常退出,不要用1(1是异常退出标记) System.exit(0); } // 别忘了关闭对话框 dialog.dismiss(); } );
额外注意事项:
- 调用
popExitDialog方法时,一定要传入当前Activity的实例,比如在你的主Activity里调用popExitDialog(this);,不要传Application的context,否则强转Activity会失败。 - 永远不要手动创建Activity实例,Activity的生命周期完全由Android系统管理,手动new出来的实例没有任何实际作用,还会引发各种奇怪的问题。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

