"Сервис 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
, потому что он не работает с процессами.