Search code examples
androidprocessandroid-activityipc

Every Activity in Android is a Process,or One Application is one process


In this page, http://androidapps.org.ua/androidintro_ipc.html , intent switching between activities is described as Inter Process Communication. Now I am confused whether every activity is a separate process in android or All activities inside an application is one process. I have checked the process id of all activities and service in my Application using:

 int id = android.os.Process.myPid();
 System.out.println("Process id of Activity1 :"+id);

But it is showing same process id. Please reply back.


Solution

  • All activities inside an application run in one process?
    

    It depends on value of android:process attribute in application manifest.

    if attribute android:process is not defined for Application/Activity tags in the manifest, by default all the activities will run in single process (process name will be name of the package defined in manifest)

    <?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">
            <activity android:name=".Activity1">
            </activity>
            <activity android:name=".Activity2">
            </activity>
            <activity android:name=".Activity3">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    

    In the above manifest all activities run in process com.so.test,ps command output in adb shell:

    # ps
    app_39    668   33    84492  20672 ffffffff afd0c51c S com.so.test
    

    If android:process is specified for Activity new process will be created with the same userid and the activity runs in that process.

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

    If the manifest is defined like above

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

    ps output in adb shell

    # ps
    app_39    650   33    83192  20900 ffffffff afd0c51c S com.so.p1
    app_39    659   33    83188  20864 ffffffff afd0c51c S com.so.p2
    app_39    668   33    84492  20672 ffffffff afd0c51c S com.so.p3
    

    If an Activity needs to be run in another process not defined in this manifest, both APKs should be signed with the same certificate.