Je me fâche souvent contre Thread en utilisant Cordova.framework, donc je vais prendre un commandement pour l'écrire.
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.
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.
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