Articles of 进程

以不同的过程打开相机

我的一个应用程序在一些Kitkat Samsung设备中存在严重的活动娱乐问题。 拍摄照片时问题更频繁出现,并且在具有一半RAM的蹩脚的Jellybean Samsung没有观察到。 尽管没有OutOfMemoryException ,但日志显示内存不足的情况。 我认为在Kitkat有一个更积极的活动关闭政策(或者默认的相机应用程序漏洞)。 当我的应用程序的内存很高时,我想知道操作系统是否会关闭我的活动,或者当所有应用程序使用的总内存很高时,它会关闭它们。 如果操作系统具有每个进程阈值,则可能在不同的进程中打开相机可能会有所帮助。 我知道可以使用清单中的process属性在自己的进程中启动服务。 假设Activities不存在等效属性,如果我在自己的进程中启动了代理服务,然后从该服务启动了一个活动,那么活动是否也会在此过程中运行?

在Android应用程序中使用多个进程的优缺点是什么

我写这个问题不是作为任何特定应用的一部分,而是作为未来应用的潜在用途的一部分。 我知道这个问题的答案可能非常具体,但我希望你能忍受我。 我会按原样expression我的理解,希望你可以通过扩展它来帮助我。 令人惊讶的是,我在网上搜索了一个“完整”的概述并且无法find它。 显然欢迎任何指向相关页面的链接。 默认情况下,Android应用程序在单个进程中运行。 默认情况下,您启动的每个活动或服务都会在主线程中运行。 用户的所有操作都由主线程的Looper排队,并且相应的回调在主线程中处理。 为了提供并发性,线程可以以多种不同的方式启动,单个或池中。 在这方面没有明确需要多个过程。 使用多个进程来允许设备的多个内核并行工作是不必要的,因为Threads也可以并行运行,甚至可能是你的主线程 ? 但也许实际上更容易实现? 为了让Activity或Service在特定(可能不同的)进程中工作,您只需在Manifest文件中设置android:process属性。 这么容易实现? Android框架专为移动设备而构建,通常具有有限的内存。 因此,可以在各种情况下杀死进程, 这里明确说明。 只要您实现活动和服务的生命周期回调,例如onStop或onDestroy ,这不应该给出任何实际问题。 但显然,通过使用多个进程来划分应用程序的各个部分,可能会使更重要的事情保持活力。 例如,后台下载服务可以保持活动(重要性为3级),而启动此服务的初始活动的进程(现在在后台(级别4))可以为其资源释放。 此外,您正在隔离应用程序的核心function,这可能会让您的设备更好地利用其资源? Binder框架使IPC非常容易处理,并且无论实际使用多个进程,您都可以使用它。 我认为向应用程序提供多个进程的主要成本是访问共享资源,或者在进程之间发送这些资源,不包括从Zygote分支进程所需的额外资源。 我想知道使用多个进程是否会强迫您以不同方式实现您的应用程序? 我认为从概念上讲,使用多个流程不会增加实施的便利性? 总结多个过程的优点: 隔离可能会提供更多的终身保护。 分区化使设备在重新获得资源方面具有更大的可操作性。 并行化性能提升? 缺点: 必须使用资源从Zygote分支新进程 在应用程序中,需要在多个进程上共享资源,这会对设备和应用程序性能造成压力。 我能想到的主要用例 : 对任何用户交互使用前台活动,并运行连续使用的绑定服务以执行有用的同步,该同步可能比用户对您的活动和/或应用程序的会话寿命更长。 如果您对我的理解有任何评论,请说明(在我的解释中注意几个问号)。 如果你有任何优点和/或缺点添加请回复,我会将它们添加到列表中。

具有setRetainInstance(true)的片段是否能够在进程关闭后继续存在?

考虑到这种情况:如果我创建了一个活动并且它移动到后台并且此活动包含设置为setRetainInstance(true)的Fragment ,那么Android OS可能在某些时候仍然决定关闭活动的托管过程以免费记忆。 然后通过onSaveInstanceState(Bundle)保存Activity的状态 – 据我所知 – 将相关的Bundle写入文件系统以使进程关闭。 (因此bundle中对象的要求是Serializable )。 稍后,可以通过onRestoreInstanceState(Bundle)在新进程中检索应用程序状态。 相反,我的Fragment允许包含不一定是Serializablevariables。 因此,我想, Fragment不能像Bundle一样存储在磁盘上。 那么当进程被杀死时,我的片段会发生什么? 我想知道这个阅读开发人员指南( http://developer.android.com/guide/components/processes-and-threads.html ): 保存当前对用户不可见的活动的进程(活动的onStop()方法已被调用)。 这些过程对用户体验没有直接影响, 系统可以随时终止它们以回收前台,可见或服务进程的内存 。 通常有许多后台进程在运行,因此它们保存在LRU(最近最少使用的)列表中,以确保具有用户最近看到的活动的进程是最后被杀死的进程。 如果活动正确实现其生命周期方法并保存其当前状态 ,则终止其进程将不会对用户体验产生明显影响,因为当用户导航回活动时,活动将恢复其所有可见状态。 我理解上面的杀戮 ,以便关闭VM实例并将进程的状态写入文件系统(这里是Bundle play)。 稍后读取包以恢复该过程。 因为片段的保留不涉及生命周期方法,因为我不知道如何保留例如指向网络连接的指针(你当然不应该在片段中有这样的指针),我想知道片段是否如果在此期间关闭该过程,仍然会恢复。 我得出结论,他们肯定需要重新创建,因此生命周期方法应尽可能优于setRetainInstance(true) 。 这个假设有意义吗?

如何读取android进程命令的输出

我试图用java获取android shell命令’getprop’的输出,因为无论如何,getprop()总是返回null。 我试过developer.android.com: Process process = null; try { process = new ProcessBuilder() .command(“/system/bin/getprop”, “build.version”) .redirectErrorStream(true) .start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } InputStream in = process.getInputStream(); //String prop = in.toString(); System.out.println(in); process.destroy(); 然而,打印的不是输出而是一堆字符和数字(现在没有确切的输出)。 如何获得流程的输出? 谢谢!

获取进程的PID以杀死它,而不知道它的全名

我正在编写一个Android应用程序。 现在我要去应用程序应该杀死进程的部分。 但我不知道它的全名或它的PID。 我知道命令: android.os.Process.killProcess(Pid) 和 android.os.Process.getUidForName(“com.android.email”) 但我的问题是我不知道这个过程的全名。 这是一个本机代码进程,所以不像com.something.something 该过程是/data/data/com.something.something/mybinary 但它运行的命令如 /data/data/com.something.something/mybinary -a 123 -b 456 因为这个我不能用 android.os.Process.getUidForName(“/data/data/com.something.something/mybinary”)

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方法来获取进程列表,以及杀死它们的方法。 或者只是给我一些建议。