You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Android应用在关闭或崩溃后自动重启?是否有现成应用可用?

Android应用崩溃/意外关闭后自动重启的实现方案及现成工具

一、手动实现方法

1. 全局异常捕获处理

通过实现UncaughtExceptionHandler捕获未处理的异常,在异常发生时触发应用重启逻辑。示例代码如下:

public class CrashHandler implements Thread.UncaughtExceptionHandler {
    private static CrashHandler instance;
    private Context mContext;

    private CrashHandler() {}

    public static CrashHandler getInstance() {
        if (instance == null) {
            instance = new CrashHandler();
        }
        return instance;
    }

    public void init(Context context) {
        mContext = context;
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        // 可选:保存异常日志到本地
        saveCrashLog(throwable);
        // 重启应用
        Intent intent = new Intent(mContext, SplashActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(intent);
        // 结束当前进程
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(1);
    }

    private void saveCrashLog(Throwable throwable) {
        // 实现日志保存逻辑
    }
}

注意:Android 10及以上版本对后台启动Activity有严格限制,若应用在后台崩溃,直接启动Activity会失败,此时可改为启动前台Service,再由Service触发应用重启。

2. 前台Service结合重启机制

前台Service的系统优先级更高,不易被杀死,可在Service中监听应用状态,或在Service被销毁时触发重启:

  • 首先创建前台Service,添加通知栏保持前台状态:
public class KeepAliveService extends Service {
    private static final int NOTIFICATION_ID = 1001;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 创建前台通知
        Notification notification = new NotificationCompat.Builder(this, "keep_alive_channel")
                .setContentTitle("应用运行中")
                .setContentText("正在保持应用活跃")
                .setSmallIcon(R.drawable.ic_launcher)
                .build();
        startForeground(NOTIFICATION_ID, notification);
        
        // 可选:定期检查主进程是否存活,若死亡则重启
        checkProcessAlive();
        
        return START_STICKY;
    }

    private void checkProcessAlive() {
        // 实现进程存活检查逻辑,比如通过包名查找进程
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        // 当应用被用户从最近任务栏移除时,触发重启
        Intent intent = new Intent(getApplicationContext(), SplashActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);
        super.onTaskRemoved(rootIntent);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
  • 配合AlarmManager或JobScheduler,在Service被意外销毁时触发重启,避免系统直接杀进程导致onTaskRemoved不执行。

3. 系统广播与进程监听

注册系统广播监听应用状态变更事件,或通过ActivityManager实时监测自身进程状态,一旦发现进程死亡立即触发重启逻辑。不过这种方法可靠性不如前两种,系统广播可能存在延迟或被拦截。

二、现成可用的应用

  • AutoStart Manager:支持配置应用在崩溃、被关闭后自动重启,需授予自启动权限、后台运行权限,部分国产厂商机型需单独开启厂商自白名单。
  • App Alive:专注应用保活与自动重启,提供进程监控、崩溃重启、后台保活等功能,适配多数Android版本,但同样需要权限支持。
  • Tasker:通过自定义任务规则实现应用崩溃或关闭后的自动重启,灵活性高,适合有自定义需求的用户,但学习成本略高。

注意:所有第三方工具在Android 12及以上版本中,都需要用户手动授予相应的后台权限、自启动权限,否则无法正常工作。

内容的提问来源于stack exchange,提问作者Garuda Consulting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:01:45