-
一个应用程序默默地识别只有一个进程,这个进程的名称(主进程)是应用程序的包名,进程是系统资源分配和调度的基本单元,每个进程都有自己独立的资源和内存空间,其他进程不能任意访问当前进程的内存和资源, 并且系统将限制分配给每个进程的内存。
如果一个进程占用超过这个内存限制,就会上报OOM的问题,很多频繁的操作涉及大**或者需要读取内存中的大段数据,很容易上报OOM的问题,如果此时程序中人为地使用GC会严重影响程序的流畅性, 而且有时候也没用,大部分时候我们可以在android:minsdkversion=“11”及以上的应用中,在应用标签上加上一句“android:largeheap=”true“,让系统给应用分配更多可请求的内存
但这种方法的缺点是:
有时它并不能完全解决问题,例如当 API 级别小于 11 时,或者当应用程序需要的内存多于 LargeHeap 分配的内存时; 当应用程序在后台时,它仍然占用内存,而系统的总内存如此之多,如果每个应用程序向系统请求更多的内存,就会影响整机的运行效率。
为了彻底解决应用内存问题,Android 引入了多进程的概念,它允许在同一个应用中,为了分担主进程的压力,在单独的进程中打开一些占用内存的页面,比如 flash、**** 页面、频繁绘制的页面等。 Android多进程使用非常简单,只需要在标签上添加“android:process”属性的声明四个组件,进程分为私有进程和全局进程,私有进程的名称前面有一个冒号,全局进程没有,像这样:
为了节省系统内存,您可以在退出活动时终止它(如果不人为地杀死进程,则当程序完全退出时,系统将杀死该进程),如下所示:
-
在 Android 开发中使用多个进程的好处
1)分担主进程的内存压力。
当应用越来越大时,内存也越来越大,一些独立的组件被放到不同的进程中,不占用主进程的内存空间。 当然,有兴趣的人会发现其他好处。
2)让应用留在后台,防止主进程被守护进程杀死,守护进程和主进程相互监控,当其中一个进程被杀死时重启。
Android后台进程中有很多应用是多进程的,因为它们必须留在后台,尤其是即时通讯或社交网络应用,但现在多进程已经用得不好了。
典型的用法是启动一个不可见的轻量级私有进程,在后台发送和接收消息,或者做一些耗时的事情,或者启动进程然后进行监听等。
Android开发的缺点:消耗用户的电池。
如果所有应用程序都占用此空间,则系统内存很容易被占用并导致延迟。
由于多个进程之间的通信,应用程序体系结构可能会变得复杂。 这是另一个问题。
3.多工序缺陷。
进程之间的内存空间是不可见的。 启用多进程后,会引发以下问题:
2) 静态成员的过期。
3)文件共享问题。
4)断点调试问题。
-
系统会终止应用的 UI 线程,并删除应用当前分配的内存空间**。
第二:为什么系统杀掉了UI线程,保留了内存**,但程序却能继续工作? 例如,** 继续响铃:
这是因为有一类应用程序,为了工作,当用户将这个应用程序的界面调整到后台时,这些应用程序会在后台打开一个服务,你可以理解为另一个不同于UI线程的线程,它可以独立于UI线程, 当UI线程被挂起或破坏时,它可以接管UI线程的工作,以便程序员可以继续工作。所以,为什么有时候程序被从列表中删除了,程序没有停止,这里的停止本质上是程序的某个功能没有停止,比如**,而此时程序的UI界面等无关紧要的内存已经被指责为系统**。
第三:如何将您的应用排除在最近列表之外:
电脑进程在开机时或者打开一些程序后都会自动启动,比如开头的几台是打开迅雷后出现的,建议你去下一个360最新版本的安全卫士,在高级工具中有一个开机启动项管理,如果不建议开机就禁用它,一般来说XP裸机在27个左右的进程上不会打开其他程序,如果是这本书就30多个了。 >>>More
引导加载程序和 Linux 内核使用单独的 ARM 交叉编译器进行编译,该编译器可在 中找到。 Android 根文件系统和 SDK 是使用 Android 系统自带的交叉编译环境进行编译的。 >>>More