"Сервис MeasurementBrokerService используется" отображается в моем приложении

Я столкнулся с проблемой, что приложение GooglePlayServices использует мой процесс приложений для их обслуживания, а также показывает, что процессы считаются как 2.
Я добавил скриншот для этого же. Я понятия не имею, почему это происходит.
Это занимает больше памяти по сравнению с моим процессом приложения.


Кто-то может помочь мне в этом.

введите описание изображения здесь


Отображение двух процессов здесь введите описание изображения здесь

Ответ 1

Я столкнулся с этим сегодня после добавления gcm в свое приложение и не могу понять, что именно это означает MeasurementBrokerService. Единственное, что я нашел, это комментарий:

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

из здесь

Ответ 2

Мы также увидели, что этот сервис появился. Проблема заключалась в использовании Google Analytics вместе с NotificationListenerService.

По некоторым причинам эти две вещи плохо взаимодействовали друг с другом и заставляли MeasurementBrokerService работать всегда и потреблять значительную часть памяти.

Решение для нас заключалось в том, чтобы удалить Google Analytics для альтернативного решения для аналитики.

Ответ 3

Люди, которые до сих пор проверяют этот поток для ответа, я нашел решение и отправил ответ на:

Что такое служба Google Play MeasurementBrokerService и как его остановить?

Я проверил, что на моем устройстве запущена служба Google AppMeasurement.

Я использовал следующий подход:

Следующее останавливает сбор данных с помощью firebase.

https://firebase.google.com/support/guides/disable-analytics сообщает нам следующий подход

<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />

Это само по себе все еще не может остановить инициализацию appMeasurement.

Второй шаг, который решил, заключается в добавлении следующего к файлу уровня приложения gradle:

configurations {
    all*.exclude group: 'com.google.firebase', module: 'firebase-core'
}

Это в основном удаляет весь код, который использует аналитика firebase.

Если он все еще не работает, убедитесь, что gradle не включает зависимость службы расширенного воспроизведения

например: compile

'com.google.android.gms:play-services-location:10.0.1'

вместо

'com.google.android.gms:play-services:10.0.1'

В худшем случае я и не тестировал это, так как выше это для меня было:

https://developers.google.com/analytics/devguides/collection/android/v4/advanced

Google действительно должен прекратить помещать ненужные вещи без разрешения ИМХО. Надеюсь, что это поможет кому-то.

Ответ 4

Это может быть связано с интеграцией Google Analytics в вашем приложении. Удалите ссылки из Google Analytics из файлов Java, уровня проекта и уровня приложения gradle. Эта утечка происходит только в последних версиях Google Analytics. Вы можете интегрировать старые версии Google Play Services, такие как 7.3.0, которые не имеют этой проблемы, чтобы устранить эту утечку.

Ответ 5

Исключить библиотеки firebase-core в вашем файле gradle. Я столкнулся с той же проблемой.

configurations {
all*.exclude group: 'com.google.firebase', module: 'firebase-core'

}

Для получения дополнительной информации о библиотеках firebase просто перейдите по следующей ссылке

http://blog.safedk.com/technology/mobile-sdks-firebase-or-play-services/

Ответ 6

Мне удалось решить проблему, установив обратно версию Gradle версии 2.0.0 из 2.3.2. Из-за этого мне пришлось установить Gradle wraper в 2.14.1 из 3.3.

Также я возвращаюсь к buildToolsVersion '23.0.1 'из buildToolsVersion '25.0.2'.

Скомпилировав подобный проект, возможно, внес много изменений в среду сборки, потому что, когда я все изменил исходную версию, проблема исчезла, no MeasurementBrokerService больше не работает.

Ответ 7

Я нашел решение, чтобы переместить NotificationListenerService в его собственный process. Имея Службы Google Play на другом.

Фон

Прежде всего, это уже хорошее решение отделить NotificationListenerService, потому что эта вещь работает постоянно после того, как пользователь предоставляет разрешение BIND_NOTIFICATION_LISTENER_SERVICE.

В принципе, если не указано иначе, ваше приложение будет использовать один процесс. Это означает, что на вкладке "Выполняемые службы" помимо всех данных уведомления, хранящихся в NotificationListenerService, вы увидите весь свой мусор, который еще предстоит собрать GC.

Как

Чтобы запустить службу в своем собственном процессе, вам нужно добавить атрибут android:process в Manifest.xml

<service android:name="com.mypackage.services.NotificationService"
android:label="@string/app_name"
android:process=":myawesomeprocess"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">

Что нужно запомнить

Вы не можете общаться между процессами регулярно! Вы не сможете получить доступ к другому классу из Сервиса, который находится в его собственном процессе. Единственное решение - использовать трансляции

//Send
Intent intent = new Intent("com.mypackage.myaction");
context.sendBroadcast(intent);

//Receive
registerReceiver(broadcastReceiver, new IntentFilter("com.mypackage.myaction"));

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action!=null&&action.equals("com.mypackage.myaction")) {
            //
        }
    }
};

//Don't forget to unregister
unregisterReceiver(broadcastReceiver);

Убедитесь, что вы используете context, а не LocalBroadcastManager, потому что он не работает с процессами.