Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 681
Naba Avatar asked Jun 24 '11 12:06

Naba


People also ask

Is an Android activity a process?

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

Can one Android application have multiple processes?

While you might never have to build a multi-process app, it's possible to have an Android app with components running in different processes. You get several benefits like more memory, performance improvement (depends on implementation) and more by going multi-process.

What is the difference between activity and application in Android?

Application class is an optional facility for extending and storing application-global state. There are other ways of doing this, so most apps don't customize this class. Activities however are what defines every major stage of your application. It wouldn't be possible to build an application without Activities.

What is process in Android application?

A process is considered to be in the foreground if any of the following conditions hold: It is running an Activity at the top of the screen that the user is interacting with (its onResume() method has been called). It has a BroadcastReceiver that is currently running (its BroadcastReceiver.


1 Answers

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.

like image 50
Suresh Avatar answered Oct 12 '22 00:10

Suresh