【问题标题】:Android task manager sourceAndroid任务管理器源码
【发布时间】:2012-07-15 18:48:23
【问题描述】:

我想知道是否有任何我可以查看的开源 android 任务管理器(流程管理器/流程细化器)项目。我正在为我的 uni 项目开发一个应用程序,这将帮助我了解如何寻找一个好的任务管理器!有没有人知道一些我可以阅读或查看源代码的开源项目!我不需要下载源代码。

谢谢!

【问题讨论】:

标签: android android-layout android-intent android-source


【解决方案1】:

简而言之,任务杀手通过轮询操作系统来获取当前正在运行的进程列表以及它们正在消耗的内存。然后,通过智能算法或用户输入,Task Killers 向系统发出调用,告诉系统终止进程。有两个 API 可以做到这一点。

他们是:

Process.killProcess(int pid) 

ActivityManager.killBackgroundProcesses(String packageName) 

这首先通过调用 Process.killProcess(int pid) 起作用,其中 pid 是特定进程的唯一标识符。 Android 以与 linux 相同的方式杀死进程;但是,用户只能杀死他们拥有的进程。在 Android 中,每个应用程序都使用唯一的 UID (UserID) 运行。使用此 API 的应用程序只能杀死自己的进程,因此 Process.killProcess(int pid) 的文档中有以下解释:

杀死具有给定 PID 的进程。请注意,尽管此 API 允许我们根据其 PID 请求终止任何进程,但内核仍会对您实际能够终止的 PID 施加标准限制。通常这意味着仅运行调用者的包/应用程序的进程以及该应用程序创建的任何其他进程;共享一个公共 UID 的包也将能够杀死彼此的进程。 当调用此方法时,信号由操作系统生成并发送到进程。每当进程从操作系统接收到信号时,它必须要么处理该信号,要么立即死亡。 SIG_KILL 等信号无法处理并导致接收进程立即死亡。如果您想杀死您没有权限杀死的进程,即它不是您的进程,那么您必须切换用户或提升您的权限(在 android 上这需要设备上的 root 权限)。

第二个 API 的工作原理是告诉内置的 ActivityManager 你想杀死与特定包关联的进程。此 API 解决了您的 UID 与进程的 UID 匹配的需要,因为它要求用户接受 KILL_BACKGROUND_PROCESSES 权限。此权限向操作系统发出信号,表明应用已被用户批准为任务杀手。当任务终止程序想要终止应用程序时,它会告诉操作系统终止该进程,从而允许应用程序解决只能终止其拥有的进程的问题。

在 Android Docs 中说这个 API 实际上使用了第一个 Process.killProcess API

让系统立即终止与给定包关联的所有后台进程。这与内核杀死那些进程以回收内存相同;系统将根据需要在未来重新启动这些进程。 如果您想了解更多信息,我建议您阅读有关 Posix 信号和 Linux kill 命令的信息

【讨论】:

    【解决方案2】:

    你必须看看 Astrid 任务管理器,它是一个开源的 android 应用程序,你可以在这个 github repository 中获取源代码。你也可以对这个project感兴趣。

    【讨论】:

    • astrid不是进程管理器,freetaskmanager太老了,不能直接建。
    【解决方案3】:

    看看fossil,为了开发您自己的应用程序,它有一个跟踪器和您可能需要的所有其他东西都在一个地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多