Die Lösung, die ich gefunden habe, ist das NotificationListenerService
zu seinem eigenen process
zu bewegen. Während Google Play Services auf einem anderen Konto ist.
Hintergrund
Zunächst einmal ist es schon eine gute Entscheidung, die NotificationListenerService
zu trennen, weil das Ding ständig läuft, nachdem Benutzer die BIND_NOTIFICATION_LISTENER_SERVICE
Erlaubnis erteilt.
Grundsätzlich, sofern nicht anders angegeben, wird Ihre App einen Prozess verwenden. Das bedeutet, dass Sie auf der Registerkarte "Running Services" neben allen Benachrichtigungsdaten, die in NotificationListenerService
gespeichert sind, all Ihren Müll sehen, der noch von GC erfasst werden muss.
Wie
Um einen Dienst in einem eigenen Prozess, den Sie das android:process
Attribut in Ihrem 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">
Aktivitäten hinzufügen müssen laufen
Sie können sich zu erinnern Kommunizieren Sie nicht regelmäßig zwischen Prozessen! Sie können nicht auf eine andere Klasse von einem Dienst zugreifen, der sich in einem eigenen Prozess befindet. Die einzige Lösung ist Broadcasts zu verwenden
//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);
Achten Sie darauf, context
und nicht LocalBroadcastManager
, weil es nicht mit Prozessen funktioniert.
Das passiert auch für Google Mail App und es ist seltsam. – binaryKarmic