"Service MeasurementBrokerService is in use" está mostrando no meu processo de Aplicação
encontrei um problema que a aplicação GooglePlayServices está a usar o meu processo de aplicação para o seu serviço e também a mostrar que os processos contam como 2.
eu anexei a imagem para o mesmo. Não faço ideia porque está a acontecer.
Ele está tomando mais memória comparar com o meu processo app.
7 answers
Encontrei isto hoje depois de adicionar gcm à minha aplicação e não consigo descobrir qual é exactamente o uso disto {[[0]}. A única coisa que encontrei foi este comentário:
" eu também o tinha e acho que está relacionado com o ouvinte de notificação, uma vez que parece que impedir o acesso de notificações de macrodroid faz com que pare. (espero que seja claro, meu Inglês é apenas o restante dos tempos de escola...)"
Aqui.A solução para nós era remover o Google Analytics para uma solução de análise alternativa.
Pessoas que ainda verificam este tópico para uma resposta, eu encontrei uma solução e postei uma resposta em:
O que é o Google Play services MeasurementBrokerService e como pará-lo?
Verifiquei que, de alguma forma, o serviço de medição do google estava a funcionar no meu dispositivo.Recorri à seguinte abordagem:
As seguintes paragens de recolha de dados por base de fogo.
Https://firebase.google.com/support/guides/disable-analytics diz - nos a seguinte abordagem
<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />
Isto por si só ainda não pode impedir a medição de inicialização.
O segundo passo que se resolveu é adicionar o seguinte ao ficheiro de gradle do nível da aplicação:
configurations {
all*.exclude group: 'com.google.firebase', module: 'firebase-core'
}
Isto basicamente remove todo o código que a análise da base firebase usa.
No caso de ainda não funcionar, certifica-te que o gradle não inclui o serviço de broad play. dependênciaEg: compile
'com.google.android.gms:play-services-location:10.0.1'
Em vez de
'com.google.android.gms:play-services:10.0.1'
O pior caso e eu não testei isto porque o acima resolvido para mim é:
Https://developers.google.com/analytics/devguides/collection/android/v4/advanced
O Google deve parar de colocar coisas indesejadas sem a permissão do dev IMHO. Espero que isto ajude alguém.configurations {
all*.exclude group: 'com.google.firebase', module: 'firebase-core'
}
Para mais detalhes sobre bibliotecas firebase, basta percorrer o seguinte link
Http://blog.safedk.com/technology/mobile-sdks-firebase-or-play-services/
Eu poderia resolver o problema ajustando a versão de Gradle para 2.0.0 a partir de 2.3.2. Por causa disso, eu tive que colocar o Gradle wraper para 2.14.1 de 3.3.
Também voltei ao buildToolsVersion '23.0.1' do buildToolsVersion '25.0.2'.
Ao compilar o projecto desta forma, provavelmente fez muitas alterações no ambiente de construção, porque quando eu mudei tudo de volta para a versão original o problema desapareceu, nenhum MeasurementBrokerService está mais em execução.
A solução que encontrei é mover o NotificationListenerService
para o seu próprio process
. Enquanto o Google tem Serviços de jogo em outro.
Contexto
Em primeiro lugar, já é uma boa decisão separar o {[[2]}, porque esta coisa está a correr constantemente depois de o utilizador conceder a permissão BIND_NOTIFICATION_LISTENER_SERVICE
.
Basicamente, a menos que declarado o contrário, o seu aplicativo vai usar um processo. Isto significa que dentro da página "Serviços em execução", para além de todos os dados de notificação armazenado no NotificationListenerService
você vai ver todo o seu lixo que ainda está para ser recolhido por GC.
Como
Para executar um serviço no seu próprio processo, você precisa adicionar o atributo android:process
no seu 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">
Coisas para recordar
Não se pode comunicar entre processos de forma regular! Você não será capaz de acessar outra classe A partir de um serviço que reside em seu próprio processo. A única solução é usar Emissões//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);
Certifique-se que usa context
e não LocalBroadcastManager
, porque não funciona com processos.