Cordova Exec bloqué le thread principal, même après l'utilisation de CordovaInterface.getThreadPool()
- Je obtenir de l'avertissement suivant:
THREAD WARNING: exec()
call to MyPlugin.setAndroidPreferences blocked the main thread for 49ms.
Plugin should use CordovaInterface.getThreadPool().
Mais de mon code que j'utilise cordova.getThreadPool()
:
private boolean setAndroidPreferences(
final JSONArray args,
final CallbackContext callbackContext)
{
cordova.getThreadPool().execute(new Runnable() {
@Override
public void run() {
try {
/* ... */
if ( /* ... */)
{
final SharedPreferences settings = cordova.getActivity().getSharedPreferences(preferenceLib, Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = settings.edit();
editor.putString(preferenceName, preferenceValue);
editor.commit();
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
} else { callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR));
}
} catch (JSONException e) {
e.printStackTrace();
Log.e(TAG, "getSetSharePreferences" + ": Error: " + PluginResult.Status.JSON_EXCEPTION);
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
}
}
});
return true;
}
Ce que je fais de mal?
Merci,
avez-vous été capable de comprendre cela?
Je n'ai aucune idée, mais il pourrait être l'appel de fonction. pour moi 48 ms est beaucoup, même pour la génération de pool de threads
ahh je vois, je suis tombé sur le même problème, il a été plus d'un avertissement; si je tombe sur des solutions viables, je vais vous laisser savoir.
même problème ici, l'obtention de l'avertissement, même à l'aide de cordoue.getThreadPool()
Je n'ai aucune idée, mais il pourrait être l'appel de fonction. pour moi 48 ms est beaucoup, même pour la génération de pool de threads
ahh je vois, je suis tombé sur le même problème, il a été plus d'un avertissement; si je tombe sur des solutions viables, je vais vous laisser savoir.
même problème ici, l'obtention de l'avertissement, même à l'aide de cordoue.getThreadPool()
OriginalL'auteur snaggs | 2014-07-05
Vous devez vous connecter pour publier un commentaire.
Selon http://www.donmarges.io/thread-warning-exec-call-blocked-the-main-thread-plugin-should-use-cordovainterface-getthreadpool-cordova-plugin-warning/ essayez ce qui suit:
}
OriginalL'auteur Paul Facklam
Vous devez utiliser:
au lieu de:
Après d'intenses débogage, j'ai réussi à extraire les éléments suivants journaux d'erreur: FIL AVERTISSEMENT: exec() appel à UniversalAnalytics.startTrackerWithId bloqué le thread principal pour 34ms. Plugin doit utiliser CordovaInterface.getThreadPool(). et de FIL AVERTISSEMENT: exec() appel à OneSignalPush.init bloqué le thread principal pour 64ms. Plugin doit utiliser CordovaInterface.getThreadPool(). Je me demande ce que pourrait être la cause du gel et Pas de Réponse de l'application et que cela est lié à votre requête aswell. Avez-vous trouvé une manière de contourner ce problème? Merci
OriginalL'auteur davidrl1000
source de référence
c'est un peu critique cordova d'avertissement qui indique à l'utilisateur plugin,
que tout ralentissement de 50 ms doit être appelée dans un thread d'arrière-plan.
Le BEC le SDK n'est pas à l'aide de l'cordova Thread-piscine
c'est plutôt à l'aide d'un thread d'arrière-plan qui a été modifiée pour ExecutorTask pour les futures versions.
Votre asynchrone appel connect() est déjà exécutée dans un thread d'arrière-plan de sorte qu'il ne devrait pas bloquer votre navigateur fil.
Mais l'initialisation et le mécanisme de chargement du BEC plugin (machine virtuelle Java) pourrait être la raison pour un court laps de temps de blocage.
Nous avons ajouté cette question, une enquête détaillée sur le blocage de la raison
donc nous pouvons prévenir les cordova à reconnaître cette courte situation de blocage dans l'avenir.
Vous ne pouvez pas éviter cet avertissement dans votre code et d'ignorer l'avertissement.
OriginalL'auteur Jon Goodwin