Android中使用System.exit(0)退出后app又重新启动

System.exit(0):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。System.exit(0)正常终止程序,有时候在退出安卓应用会使用到。
使用这个方法如果前面存在没有finish()掉的Activity会重新启动,导致退出失败。
MainActivity代码:直接启动第二个Activity:

[java] view plain copy

public class MainActivity extends AppCompatActivity {

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    Intent intent=new Intent(MainActivity.this,NewActivity.class);  
    startActivity(intent);  
}  

}

NewActivity代码:
[java] view plain copy

public class NewActivity extends Activity {  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    Button button=new Button(NewActivity.this);  
    button.setText("退出测试");  
    button.setOnClickListener(new View.OnClickListener() {  
        @Override  
        public void onClick(View view) {  
            System.exit(0);  
        }  
    });  
    setContentView(button);  
 }  
}  

此时点击button退出应用重启,修改MainActivity:启动新的Activity,finish存在MainAcitvity
[java] view plain copy

public class MainActivity extends AppCompatActivity {

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    Intent intent=new Intent(MainActivity.this,NewActivity.class);  
    startActivity(intent);  
    this.finish();  
}  

}

总结:可能是因为应用栈中还存在别的activity没有finish调,导致应用重新启动。使用System.exit(0)时,确保任务栈中所有activity已经finish。

可以通过捕获全局异常来实现APP崩溃后的重新启动。具体实现步骤如下: 1. 创建一个自定义的Application类,并在onCreate()方法设置UncaughtExceptionHandler(全局异常处理器)。 ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); } } ``` 2. 实现UncaughtExceptionHandler接口,重写uncaughtException()方法,在该方法处理异常信息并重启APP。 ```java public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { // 处理异常信息 Log.e("MyUncaughtExceptionHandler", "uncaughtException: " + e.getMessage()); // 重启APP Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); PendingIntent pendingIntent = PendingIntent.getActivity( getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1000, pendingIntent); // 结束进程 android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } } ``` 在uncaughtException()方法,首先处理异常信息,然后通过AlarmManager和PendingIntent实现重启APP的功能,最后通过killProcess()和System.exit()方法结束进程。 3. 在AndroidManifest.xml文件注册自定义的Application类。 ```xml <application android:name=".MyApplication" ... </application> ``` 通过以上步骤,即可实现APP崩溃后的自动重启
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值