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

如何通过Flutter应用终止正在运行的其他应用?

核心限制提前说明

跨应用终止进程的能力完全依赖系统开放的权限,不存在Flutter层的统一跨平台API,iOS端受沙盒机制严格限制,第三方应用没有任何公开API可以终止其他运行中的应用,使用私有API实现会直接被App Store拒审,以下方案仅适用于Android端

Android端实现步骤

1. 配置对应权限

根据你适配的Android版本,在android/app/src/main/AndroidManifest.xml中声明所需权限:

<!-- 基础杀后台进程权限,Android全版本普通应用可申请 -->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<!-- Android 11及以上需要查询其他应用包名时添加,上架应用市场需符合对应审核规则 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    android:maxSdkVersion="34" />
  • 普通第三方应用仅能通过上述权限杀死其他应用的后台进程,无法终止前台活跃的应用
  • 如果需要强制终止任意状态的应用,你的应用必须持有系统签名、获得Root权限,或者被设置为设备所有者(Device Owner),普通上架的第三方应用拿不到这个级别的权限

2. 编写Flutter与原生的通信逻辑

Flutter本身没有提供操作系统进程的接口,需要通过MethodChannel调用Android原生的API实现:
首先是Flutter端的封装代码:

import 'package:flutter/services.dart';

class ProcessUtil {
  static const _channel = MethodChannel('native_process_control');

  /// 传入目标应用包名,尝试终止对应应用进程
  static Future<bool> killTargetApp(String packageName) async {
    try {
      final bool res = await _channel.invokeMethod('killApp', {
        'packageName': packageName
      });
      return res;
    } catch (e) {
      return false;
    }
  }
}

然后在Android端的MainActivity.kt中添加对应方法处理:

import android.app.ActivityManager
import android.content.Context
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val channelName = "native_process_control"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, channelName).setMethodCallHandler { call, result ->
            when (call.method) {
                "killApp" -> {
                    val targetPkg = call.argument<String>("packageName")
                    if (targetPkg.isNullOrBlank()) {
                        result.success(false)
                        return@setMethodCallHandler
                    }
                    val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
                    // 普通权限下调用系统公开API杀后台进程
                    activityManager.killBackgroundProcesses(targetPkg)
                    result.success(true)
                }
                else -> result.notImplemented()
            }
        }
    }
}

如果你的应用已经拿到Root权限,可以替换原生端的实现逻辑,执行shell命令强杀任意应用:

Runtime.getRuntime().exec(arrayOf("su", "-c", "am force-stop $targetPkg"))
适配注意事项
  • 国内MIUI、ColorOS、OriginOS等定制ROM对第三方应用杀进程的行为有额外拦截,部分机型需要用户手动开启“后台管理”“后台弹出界面”等特殊权限后功能才能正常生效
  • 申请QUERY_ALL_PACKAGES权限上架Google Play、国内主流应用市场时,需要提交明确的使用场景说明,不符合使用规范会被直接拒审
  • 系统签名应用、设备所有者应用可以调用ActivityManager.forceStopPackage()接口直接终止任意状态的应用,不需要Root权限,但普通应用拿不到这个接口的调用权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:45:17