Обнаружение класса приложения, работающего в основном процессе в многопроцессном приложении

У меня есть приложение для Android, которое расширяет класс Application и имеет множество компонентов приложения (службы, действия и широковещательные приемники), работающих в трех разных процессах.

Каждый процесс будет создавать экземпляр класса Application, как только он будет запущен. Итак, я искал, как я могу проверить код класса Application, если экземпляр принадлежит основному процессу приложения, но я ничего не смог найти.

Мой манифест выглядит так:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name=".MyApplication"
    android:theme="@style/AppTheme" >

    <activity
        android:name="...">
        ...
    </activity>

    <activity
        android:name="...">
        ...
    </activity>

    <service android:name="..." >
    </service>

    <service android:name="..."
        android:process=":SecondProcess" >
    </service>

    <service android:name="..."
        android:process=":ThirdProcess" >
    </service>

Далее моя реализация класса Application:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        if (is this instance being ran on the main process?) {
            // Do something
        }
    }

}

Кто-нибудь знает, как проверить, запущен ли экземпляр в основном процессе?


person Storo    schedule 28.01.2016    source источник
comment
Возможный дубликат Есть ли способ получить текущий имя процесса в Android   -  person Nachi    schedule 28.01.2016
comment
@Nachi явно не дубликат, поскольку у них обоих разные цели. Один является простым подходом, который можно использовать в другом.   -  person Storo    schedule 28.01.2016


Ответы (1)


Ищу ответ на тот же вопрос.

Пока что я обнаружил, что использование может найти текущий запущенный процесс по идентификатору процесса и поставить проверку if в onCreate.

 public void onCreate(){
 ...
 String processName = getProcessName();
 switch(processName){
    case process1:
         // do something 
         break;
    case process2:
         // do something 
         break;
    ....

 }
person user2662821    schedule 29.04.2016
comment
В классе Application нет метода getProcessName(). - person Storo; 06.05.2016
comment
да, прямого метода нет, но вы можете найти имя процесса. проверьте это stackoverflow.com/questions/19631894/ - person user2662821; 08.05.2016