对Android开发来说很新,我对以下情况感到困惑,请帮助我。
我已经读过每个android应用程序都是一个单独的linux进程
默认情况下,每个Android应用程序都是一个单独的linux进程
但是我们可以在应用程序中启动一个单独的进程,例如:
我们可以将服务作为单独的流程运行
每个进程都在自己的VM中运行
如果名为“test”的应用程序启动2处理servicePr1和servicePr2,那么它将如何封装到应用程序(“test”)
如果我们启动两个进程,每个进程都有单独的VM?如果那么有3个VM包括应用程序吗?这些都是如何封装到应用程序中的?
如果我们关闭“test”,这两个进程servicePr1和servicePr2会作为单独的进程保留在内存中吗?
这些是否存在于任务管理器中?
封装,我的意思是
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.so.test" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:process="com.so.p1">
<activity android:name=".Activity1">
</activity>
<activity android:name=".Activity2" android:process="com.so.p2">
</activity>
<activity android:name=".Activity3" android:process="com.so.p3">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这里有3个流程从一个应用程序开始
Activity1 runs in com.so.p1 process
Activity2 runs in com.so.p2 process
Activity3 runs in com.so.p3 process
我读到每个android进程都在不同的VM上运行。
当应用程序“test”启动时,有四个具有相同UID的四个VM的android进程?
如果这4个进程在单独的VM中运行,可以说它是一个应用程序(4个单独的进程)
这4个流程是否会通过IPC相互沟通?
当我们退出应用程序时,这些进程会发生什么?将有三个进程留在记忆中。
答案 0 :(得分:1)
应用程序启动的服务可以保持活动状态而不进行任何活动,具体取决于它们的启动和配置方式。根据{{3}},有两种服务:启动服务和绑定服务。对于已启动的服务:
当应用程序组件(例如活动)通过调用startService()启动它时,服务“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被破坏。
任务管理器会看到所有正在运行的进程,因此任何正在运行的服务都将可见。
我不知道“封装到应用程序”是什么意思,所以我无法解决你问题的那一部分。
编辑(解决编辑问题)
指南主题the docs中介绍了这一点。
当应用程序“test”启动时,有四个android进程,其中四个VM具有相同的UID?
当样本清单中的应用程序首次启动时,它将有两个进程,一个对应于应用程序,另一个对应于Activity3
(主要启动组件)。如果Activity2
启动,它将在第三个进程中运行。如果Activity1
启动,它将在与应用程序本身相同的过程中运行。
如果这4个进程在单独的VM中运行,可以说它是一个应用程序(4个单独的进程)
在不同进程中运行的组件(活动,服务,广播接收器,数据提供程序)是同一应用程序的一部分,因为Android系统中的内部簿记将组件标识为应用程序的一部分。 “应用程序”和“进程”是Android中的正交概念;应用程序可以分布在多个进程中,进程可以运行来自不同应用程序的组件(前提是应用程序共享相同的Linux用户ID并使用相同的证书进行签名)。
这4个过程是否会通过IPC相互通信?
是的,流程通过IPC进行沟通。
当我们退出应用程序时,这些进程会发生什么?将三个进程留在内存中。
这完全取决于系统。当流程中的最后一个组件完成时,该流程被归类为空流程。系统可以将其作为一种缓存形式保持活动,以加快应用程序的重启。请注意,系统也可能会终止具有实时组件的进程。这是Processes and Threads的一部分。