[JAVA] Mit dem Fehler Cordova-> Looper.prepare ()

Ich werde oft wütend auf Thread, wenn ich Cordova.framework benutze, also nehme ich ein Gebot, um es aufzuschreiben.

Fehlerinhalt

adb.logcat


java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Dies geschieht, wenn Sie eine Ansicht in einem Hintergrundthread erstellen.

Ursache

Cordova ist nicht im Grunde genommen, weil es eine Web-Engine verwendet, aber ... Es gibt Zeiten, in denen ich NativeView verwenden muss, also ist das der Zeitpunkt.

Zum Beispiel

test.Java


@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    cordova.getActivity().runOnUiThread(new Runnable() {
        public void run() {
            ...
            timerView = view.findViewById(R.id.hogeview);

            //Kein guter Punkt! !! !!
            mHandler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mRootView.addView(timerView);
                },200);
            }
        }
    });
    return true;
}

Dies ist ein Beispiel für das, was ich getan habe, weil die Ansichtsgenerierung stark war und der Bildschirmübergang eingeklemmt war. Eine weitere Verzögerungsverarbeitung wird in die Thread-Verarbeitung von Cordova geschrieben. Looper wird grundsätzlich auf dem UI-Thread ausgeführt. Wenn Sie also den Thread mit Handler ändern, funktioniert Looper nicht.

Da die Erstellung von View diesmal sehr umfangreich ist, wird sie von cordova.getActivity (). RunOnUiThread () aufgerufen, also mHandler (). PostDelayed (new Runnable () { Wird loswerden.

Einfache Lösung

test.Java


@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    cordova.getActivity().runOnUiThread(new Runnable() {
        public void run() {
            ...
            timerView = view.findViewById(R.id.hogeview);
            mRootView.addView(timerView);
        }
    });
    return true;
}

Oder es gibt eine Möglichkeit, Looper selbst zu implementieren. Grundsätzlich handelt es sich jedoch um eine von Framework aufgerufene Methode, die daher verboten ist.

Ich mache oft so einfache Dinge ...

Recommended Posts

Mit dem Fehler Cordova-> Looper.prepare ()
Ändern Sie den Port mit SpringBoot
Verspotten Sie den Konstruktor mit PowerMock
Fehler beim Spielen mit Java
Fehler in db: migrate: reset
Umgang mit dem Fehler FEHLER: Während der Ausführung von gem ... (Gem :: FilePermissionError)
[Rails] Was war die Fehlermeldung?
Simulieren Sie die Simplex-Methode mit der GUI
Scrollen Sie automatisch mit libGDX durch den Hintergrund
Programmieren mit Ruby (unterwegs)
[Fehler] SassC :: SyntaxError mit Hintergrundbild: Bild-URL
Folgen Sie dem Link mit Selen (Java)
Mit CSS in die Mitte legen
DB-Fehler bei der Bereitstellung mit Heroku
Der Typ, der mit Kotlin mit Ressourcen versucht
Bildverarbeitung: Spielen wir mit dem Bild