[JAVA] Avec l'erreur Cordova-> Looper.prepare ()

Je me fâche souvent contre Thread en utilisant Cordova.framework, donc je vais prendre un commandement pour l'écrire.

contenu de l'erreur

adb.logcat


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

Cela se produit lorsque vous créez une vue dans un thread d'arrière-plan.

Cause

Cordova n'est pas essentiellement parce qu'il utilise un moteur Web, mais ... Il y a des moments où je dois utiliser NativeView, alors c'est quand.

Par exemple

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);

            //Pas de bon point! !! !!
            mHandler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mRootView.addView(timerView);
                },200);
            }
        }
    });
    return true;
}

Ceci est un exemple de ce que j'ai fait parce que la génération View était lourde + la transition d'écran a été prise en sandwich. Un traitement de retard supplémentaire est écrit dans le traitement des threads de cordova. Looper fonctionne essentiellement sur le thread d'interface utilisateur, donc si vous changez le thread avec Handler, Looper ne fonctionnera pas.

La création de View étant lourde cette fois, elle est appelée par cordova.getActivity (). RunOnUiThread (), donc mHandler (). PostDelayed (new Runnable () { Va se débarrasser de.

Solution simple

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;
}

Ou il existe un moyen d'implémenter Looper vous-même. Cependant, en gros, c'est une méthode appelée par Framework, donc c'est interdit.

Je fais souvent des choses aussi simples ...

Recommended Posts

Avec l'erreur Cordova-> Looper.prepare ()
Changer de port avec SpringBoot
Mock le constructeur avec PowerMock
Erreur lors de la lecture avec java
Erreur dans la base de données: migrate: reset
Comment gérer l'erreur ERREUR: lors de l'exécution de gem ... (Gem :: FilePermissionError)
[Rails] Quel était le message d'erreur?
Simuler la méthode simplex avec GUI
Faites défiler automatiquement l'arrière-plan avec libGDX
Programmation avec ruby (en route)
[Erreur] SassC :: SyntaxError avec background-image: image-url
Suivez le lien avec Selenium (Java)
Placer au milieu avec css
Erreur de base de données concernant le déploiement à l'aide d'Heroku
Le gars qui essaie avec des ressources avec Kotlin
Traitement d'image: jouons avec l'image