Android关于杀掉进程的方案

《风波·莫听穿林打叶声》------ 苏轼 〔宋代〕

三月七日,沙湖道中遇雨,雨具先去,同行皆狼狈,余独不觉。已而遂晴,故作此词。

莫听穿林打叶声,何妨吟啸且徐行。

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。

料峭春风吹酒醒,微冷,山头斜照却相迎。

回首向来萧瑟处,归去,也无风雨也无晴。


  1. 关于使用killBackgroundProcesses杀进程不生效的问题

  2. stackoverflow 关于 killBackgroundProcesses no working的讨论

  3. 关于使用forceStopPackage()方法杀应用的讨论-1

  4. 关于使用forceStopPackage()方法杀应用的讨论-2

killBackgroundProcesses()

结论:我们可以killBackgroundProcesses(pkgName) 来杀掉后台应用。(PS: 如果是前台应用,则可以先将其放到后台,然后调用killBackgroundProcesses(pkgName)来杀掉应用)

killBackgroundProcesses(pkgName) 需要配置权限:

xml 复制代码
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    

forceStopPackage()

结论:该方法不推荐使用。其有如下几个要点:

java 复制代码
 /**
     * @see #forceStopPackageAsUser(String, int)
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
    public void forceStopPackage(String packageName) {
        forceStopPackageAsUser(packageName, mContext.getUserId());
    }

但是我们在源码中看到:

java 复制代码
  @hide
 @UnsupportedAppUsage
    public void forceStopPackageAsUser(String packageName, int userId) {
        try {
            getService().forceStopPackage(packageName, userId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

如果我们需要调用forceStopPackageAsUser(),首先需要获取userId.我们从forceStopPackage()方法中可以发现userid是从Context中获取的。

java 复制代码
 // Context.java
 /**
     * Get the user associated with this context
     * @hide
     */
    @UnsupportedAppUsage
    @TestApi
    public @UserIdInt int getUserId() {
        return android.os.UserHandle.myUserId();
    }

由于该方法是被 @hide 修饰的,意味着我们可以通过反射进行调用。

观察这几个方法,我们会发现几个注解:@hide , @SystemApi

关于这两者的区别:@SystemApi, @PrivateApi and @hide的区别

相关推荐
极客先躯14 分钟前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户606487671889619 分钟前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
随遇丿而安28 分钟前
第2周:`EditText` 不只是输入框,它是 Android 输入体验的第一道门
android
我命由我1234531 分钟前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
aXin_ya32 分钟前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
Halo_tjn35 分钟前
Java Set集合相关知识点
java·开发语言·算法
Linsk41 分钟前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
一起搞IT吧1 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
许彰午1 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
zhouwy1131 小时前
Java 快速入门笔记:从基础语法到 Spring Boot 实战
java