Articles of 进程

Android中所有正在运行的进程列表

如何获取Android系统的所有运行流程列表,包括系统启动流程? 我尝试使用以下代码获取列表: ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE ); List procInfos = activityManager.getRunningAppProcesses(); 这给了我一些进程列表,例如com.android.phone , com.android.chrome等。 但是当我在adb shell运行ps命令时,我可以看到其他一堆进程正在运行。 我附上了在我的系统中运行的所有进程的屏幕截图。 可以看出,有几个Android系统的进程也在运行,如/system/bin/vold和/system/bin/installed等。 但是, getRunningAppProcesses() API不会报告这些内容。 在其文档中,它说这个API: 返回设备上运行的应用程序进程列表。 这是否意味着它不会返回“系统进程”? 如果是这样的话,那么开发人员可以在Android上运行“ALL”进程进行迭代? – 我还尝试了什么:尝试使用ActivityManager两个API: getRecentTasks(int maxNum)和它的变体。 但Android文档警告其使用如下: 此方法在API级别21中已弃用。 从LOLLIPOP开始,此方法不再适用于第三方应用程序 getRunningServices(int maxNum) 但这两个都不能给我这样的名字,如/system/bin/debuggerd等。 注意:我在Non-Rooted设备上运行Android-4.2 Jellybean。

Android模拟器:由于内存不足而模拟进程重启的简便方法?

据我所知,Android保留随时终止后台应用程序进程的权利,以便回收RAM。 应用程序仍在运行,但仍然可以恢复,但我的所有静态variables都消失了(参见本文)。 我想在这种情况下模拟我的应用程序的行为。 最简单的方法是什么? 肯定必须有一种更容易和更可预测的方式,而不是编写一些分配大量内存的其他应用程序。

Android – 如何使用PID获取processName或packageName?

我的问题:在给定PID情况下,我可以使用什么来检索某个进程的processName或packageName ? 因为在我的任务管理器中我想使用PID同时使用killBackgroundProcesses代码来终止进程。 问题是我需要packageName / processName来做这件事,如果我让他们输入processName而不是只输入它的PID,那对用户来说会很麻烦。 这是我的任务经理的形象:

如何杀死我自己的活动 – 艰难的方式

所以我有我的活动,按下“退出”按钮我调用Activity.finish()。 这有效地关闭了我的申请。 问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样徘徊。 看起来这是正常的,因为其他应用程序也这样做。 甚至hello-world示例也在内存中徘徊。 我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦。 我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样)。 一切都以某种方式保持活着,没有任何理由。 我怎样才能真正从记忆中删除我的活动? 我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西。

Android进程杀手

也许你可以帮忙。 是否有可能获得在Android系统中运行的所有Processes列表,并杀死其中一些Processes ? 我知道有一些应用程序( task managers ),但我想编写自己的简单应用程序。 我想编写简单的任务管理器,只列出所有进程和按钮,它们会杀死其中的一些。 你能不能写一些我可以调用的Java方法来获取进程列表,以及杀死它们的方法。 或者只是给我一些建议。

当应用程序的所有活动完成后会发生什么?

场景: 我在我的Android应用程序中有四个活动,比如A,B,C和D.应用程序中有一个Constants.java类,它扩展了Application类以维护全局应用程序状态。 Constants类包含应用程序的所有常量variables。 活动流程就像这样A–>B–>C–>D 当从活动A按下后退按钮时,我正在调用finish()方法,该方法将完成活动A并关闭应用程序。 之后,如果我从所有应用程序打开应用程序, Constants.java有一个variables,其值在上次启动时仍然存在。 当我从Process.killProcess(Process.myPid()) A执行System.exit(10)后跟Process.killProcess(Process.myPid())从事活动A(在背面按下)时,同样的事情就不会发生。 问题: 通过调用每个活动的finish()完成所有活动将关闭应用程序(其过程)? 即使所有活动都已完成(关闭),variables的值如何仍然存在? 调用System.exit(10)后跟Process.killProcess(Process.myPid())退出应用程序是否公平? 更新: 如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?

Android服务:流程与非流程

将服务放在单独的流程中或将其保留在应用程序的主流程中有什么实际区别? 每个场景将用于什么?

Android会杀死每个服务还是整个进程?

我们中的许多人都知道(在松散的情况下)如果不调用Service.startForeground() ,Android中的Service将被系统杀死。 但这是整个故事……? 我正在研究一些遗留代码,将“系统”权限应用程序移植到Play商店。 由于应用程序运行的“系统”权限,此应用程序有5个后台服务(不调用startForeground() ),这些服务到目前为止是安全的。 它安装在自定义设备上。 由于时间紧迫和预算紧张,将这5个重构为1不是短期解决方案,但我们希望尽快转向公测。 简短的问题是: 如果没有前台Activity或Service ,Android会杀死每个单独的后台服务,还是仅仅杀死进程本身? 以下是有关进程和线程的Android文档中的一些信息,这些信息讨论了Android在压力下如何终止进程: Android可能会决定在某个时刻关闭某个进程 ,此时内存不足并且需要更直接为用户提供服务的其他进程。 因此,在被杀死的进程中运行的应用程序组件将被销毁。 当这些组件再次为它们工作时,将再次启动该过程。 在决定要杀死哪些进程时,Android系统会权衡它们对用户的相对重要性。 例如,与托管可见活动的进程相比,它更容易关闭托管在屏幕上不再可见的活动的进程。 因此,是否终止进程的决定取决于在该进程中运行的组件的状态。 … 常识称“ Android会杀死服务 ” 个人经验表明, Android也会杀死进程本身(如上面引用中所述)。 这可以通过在Application对象中存储对象来显示,并注意在服务被终止后它们会被重新初始化。 考虑到上述因素,有几种方法可以解决问题 : 1)做正确的事 将5个服务重构为1,在各种不同的线程上运行。 将1服务带到前台。 问题解决了。 不幸的是,目前还没有这方面的预算,我们宁愿根据项目时间表find快速解决方案。 这是将在全面生产中实施的最终解决方案。 2)许多通知 在前台启动每个服务,每个服务都有自己的Notification图标。 这是一个混乱的解决方案,但将适用于beta现场试验,购买我们一段时间。 我认为这是“蛮力”的做法。 3)受一项服务保护的流程 如果它是被杀死的进程,而不是每个单独的服务,那么运行单个前台服务就足够了。 这将“防止”(即降低Android)杀死进程的可能性。 所有5项服务都将因此而存在。 4)一项服务来统治它们 服务上的文档告诉我们,如果服务绑定到另一个上下文,那么 stopService()或stopSelf()实际上不会停止服务,直到所有客户端解除绑定。 如果我从单个前台服务绑定到其他服务,那么它们会保持活着吗? 所以: Android会杀死每个未绑定的后台服务吗? 或者它只是杀死运行应用程序的VM? 更新 经过18个 41小时的测试#3( 受一个服务保护的进程 ),所有6个服务仍在运行(5个旧加1个新服务)。 因此,如果没有前台活动或服务正在运行,那么看起来Android会杀死进程 […]

在单独的进程android中启动服务

我想在一个单独的进程中启动一个服务(即当我在设置中转到我的应用程序管理器然后转到运行服务时,它应该在一个单独的进程中显示我的服务)。 我的Android Manifest如下: 我在MainActivity中启动服务,所以当我杀死应用程序时,服务也会关闭。 任何人都可以告诉我如何将服务作为一个不同的过程启动。

Runtime.exec()bug:挂起而不提供Process对象

我是否用这个: process = Runtime.getRuntime().exec(“logcat -d time”); 或者那个: process = new ProcessBuilder() .command(“logcat”, “-d”, “time”) .redirectErrorStream(true) .start(); 我得到了相同的结果:它经常挂在exec()或start()调用中,无论我试图做什么! 运行它的线程甚至不能被Thread.interrupt()中断! subprocess肯定已启动,如果被杀死,则返回上述命令。 这些调用可能在第一次尝试时失败,所以没有办法阅读他们的输出! 我也可以用一个简单的“su -c kill xxx”命令行,结果相同! 编辑:开始使用一些调试日志调试NDK项目中的java_lang_ProcessManager.cpp文件! 所以这是我到目前为止发现的,在fork()之后父进程执行此操作: int result; int count = read(statusIn, &result, sizeof(int)); <- hangs there close(statusIn); 虽然subprocess不应该阻止它:这就是孩子做的事情( 如果开始的话 !): // Make statusOut automatically close if execvp() succeeds. fcntl(statusOut, F_SETFD, FD_CLOEXEC); <- make the […]