-1

Am very new to Android development, Am totally confused about the following cases please help me.

I have read that each android application is a separate linux process

By default each android application is a single linux process

However we can start a separate process in an application for example:

We can run a service as separate process

And each process run in its own VM

If an application named "test" starts 2 processes servicePr1 and servicePr2 then how it will encapsulate to the application("test")

If we start two process each of them has separate VM? if So Will there is 3 VM including application ? How these all encapsulate to an application?

If we close the "test" will these two process servicePr1 and servicePr2 remains in the memory as separate process ?

Will these exist in the taskmanager ?

Encapsulation, i mean

<?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>

Here 3 process are started from one application

Activity1 runs in com.so.p1 process
Activity2 runs in com.so.p2 process
Activity3 runs in com.so.p3 process

I read that each android process is run on separate VM.

When an application "test" started will there is four android process with four VM with same UID?

If these 4 process run in separate VM how it can be said that it is an application(4 individual process)

Will these 4 process communicate with each other via IPC ?

While we quit the application what will happens to these processes ? will three process remains in memory.

4

1 回答 1

1

应用程序启动的服务可以在没有任何活动的情况下保持活动状态,具体取决于它们的启动和配置方式。根据文档,有两种服务:启动服务和绑定服务。对于已启动的服务:

当应用程序组件(例如活动)通过调用 startService() 启动服务时,服务被“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被破坏。

任务管理器可以看到所有正在运行的进程,因此任何正在运行的服务都是可见的。

我不知道“封装到应用程序”是什么意思,所以我无法解决您问题的这一部分。

编辑(解决问题的编辑)

这在指南主题Processes and Threads中有介绍。

  1. 当应用程序“测试”启动时,会有四个具有相同 UID 的虚拟机的 android 进程吗?

    当您的示例清单中的应用程序首次启动时,它将有两个进程,一个对应于应用程序,一个对应于Activity3(主启动组件)。如果Activity2启动,它将在第三个进程中运行。如果Activity1启动,它将在与应用程序本身相同的进程中运行。

  2. 如果这 4 个进程在单独的 VM 中运行,怎么能说它是一个应用程序(4 个单独的进程)

    在不同进程中运行的组件(活动、服务、广播接收器、数据提供者)是同一应用程序的一部分,因为 Android 系统中的内部簿记将组件标识为应用程序的一部分。“应用”和“进程”在Android中是正交的概念;一个应用程序可以分布在多个进程中,并且一个进程可以运行来自不同应用程序的组件(前提是这些应用程序共享相同的 Linux 用户 ID 并使用相同的证书进行签名)。

  3. 这 4 个进程会通过 IPC 相互通信吗?

    是的,进程通过 IPC 进行通信。

  4. 当我们退出应用程序时,这些进程会发生什么?将三个进程保留在内存中。

    这完全取决于系统。当进程中的最后一个组件完成时,该进程被归类为空进程。系统可能会将其作为一种缓存形式保持活动状态,以加快应用程序的重新启动。请注意,系统也可能会终止具有活动组件的进程。这是活动生命周期的一部分。

于 2013-10-09T15:45:52.153 回答