Durchgesickerte Fensterausnahme, obwohl kein Dienst verwendet wird

8

Ich habe ein wirklich seltsames Problem.

Ich bekomme diesen Absturz in meinem Logcat, aber das Seltsame ist, dass meine App nichts mit der Text To Speech Sache zu tun hat. Nicht nur diese Aktivität, meine gesamte App verwendet sie überhaupt nicht.

%Vor%

Und hier ist der Code für diese Aktivität: (Alles was sie tut, ist eine URL von Intent zu bekommen und sie in WebView zu laden)

%Vor%     
La bla bla 04.08.2013, 00:55
quelle

2 Antworten

13
  

Ich bekomme diesen Absturz immer in meinem Logcat, aber das Seltsame ist, dass mein   App hat nichts mit der Text To Speech-Sache zu tun. nicht nur das   Aktivität, meine gesamte App verwendet es überhaupt nicht.

Ihre App tatsächlich hat damit nichts zu tun.

Außer wenn Sie anrufen:

%Vor%

Die Methode WebViewClassic.updateJavaScriptEnabled (boolean) wird ausgeführt:

%Vor%

Hier gibt isAccessibilityInjectionEnabled() im Fall Ihres Geräts true zurück. Es ruft eine Liste der derzeit aktivierten Accessibility Services ab und stellt / support AccessibilityServiceInfo.FEEDBACK_SPOKEN bereit. Wenn diese Liste nicht leer ist, wird true zurückgegeben.

Bewegen Sie den Stacktrace:

  

android.webkit.AccessibilityInjector.addTtsApis ()

erstellt schließlich ein TextToSpeech -Objekt.

Das Problem: TextToSpeech.connectToEngine() verwendet den Kontext, um bindService () aufzurufen. Der Kontext ist der Kontext Ihrer Aktivität (der von WebView übergeben wurde). Ich glaube, das Logcat zeigt dies (oder etwas Ähnliches), wenn WebViewActivity gestartet wird:

  

Erfolgreich an com.google.android.tts gebunden

Hypothese: Wenn Ihre Aktivität während der Bildschirmdrehung zerstört und neu erstellt wird, ist der TTS-Dienst weiterhin gebunden, während der Kontext nicht mehr gültig ist. Hierauf bezieht sich die Ausnahme.

Ich habe Folgendes versucht, um meine Hypothese zu testen:

Anstatt WebView in XML zu definieren, habe ich es dynamisch in onCreate () erstellt:

%Vor%

Beachten Sie, dass ich den Kontext der Anwendung anstelle von Activity (this) verwendet habe. Der Kontext bleibt bei einer Orientierungsänderung gültig und daher wird die Ausnahme nicht ausgelöst.

Um zu bestätigen, dass ein (oder mehrere) Accessibility Service aktiviert ist, fügen Sie diesen Code der onCreate () Ihrer Aktivität hinzu:

%Vor%

Hinweis: Ich musste TalkBack (unter Einstellungen & gt; Eingabehilfen) aktivieren, um das Problem zu replizieren. Ich bin mir auch nicht sicher, warum diese Ausnahme nicht ausgelöst wird, nachdem die Anwendung zwangsweise gestoppt wurde.

Basierend auf dem Kommentar von Benutzer Robert Nekic: Verhalten beim Zurückdruck: Wenn der Kontext der Aktivität verwendet wird, wird eine Ausnahme ausgelöst. Der Kontext der Anwendung funktioniert immer noch.

Nützliche Informationen: Link .

    
Vikram 14.09.2013, 04:29
quelle
2

Sie können dieses Code-Snippet hinzufügen, um diese ausgelöste Ausnahme für die Serviceverbindung zu vermeiden:

%Vor%

IhreWebView.getSettings (). setJavaScriptEnabled (false); wird den Aufruf von AccessibilityInjector auslösen. updateJavaScriptEnabled () in dem:

%Vor%

mTextToSpeech.shutdown () ist nur der entscheidende Punkt.

    
faywong 23.11.2014 10:11
quelle

Tags und Links