Le démarrage d'un exécutable dans le thread d'arrière-plan
J'ai, à ma connaissance, mis en place un exécutable qui est créé sur un nouveau thread. Cependant, le fil ne semble pas être en cours d'exécution en arrière-plan, et les mesures prises à l'intérieur de l'exécutable sont de blocage de l'INTERFACE utilisateur avec de fortes actions.
Voir ci-dessous:
custListLoadThread = new Thread(loadRunnable);
custListLoadThread.run();
private Runnable loadRunnable = new Runnable()
{
@Override
public void run()
{
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
Gen.popup("TEST"); //Creates a toast pop-up.
//This is to know if this runnable is running on UI thread or not!
try
{
customers = Db.BasicArrays.getCustomers(CustomApp.Session.businessCode, empId);
runOnUiThread(new Runnable() {
@Override
public void run() {
populate();
setCustListVisible(true);
loading = false;
}
});
}
catch (final Exception ex)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
Gen.popup(ex.getMessage());
}
});
}
}
};
Toutefois, ce code ne s'exécute pas en arrière-plan, il semble toujours fonctionner sur le thread de l'INTERFACE utilisateur. J'ai placé la ligne Gen.popup("TEST");
pour vous assurer de cela (de l'appel d'une toast
pop up dans un non-thread de l'INTERFACE utilisateur devrait provoquer une erreur).
Toutes les idées pour lesquelles cet exécutable n'est pas en cours d'exécution en arrière-plan?
OriginalL'auteur Mike Baxter | 2014-07-18
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour démarrer le thread, pas d'appeler la méthode run() du thread courant.
run
etstart
!+1 pour le sudo crunch finder œil.
OriginalL'auteur Steve M
Si vous voulez exécuter du code sur un thread d'arrière-plan à ne pas faire quelque chose avec l'INTERFACE utilisateur:
Bien sûr, comme écrit précédemment, vous pouvez créer un nouveau thread (qui est indépendant de la thread de l'INTERFACE utilisateur):
Dans votre exemple, vous souhaitez mettre à jour les éléments de l'INTERFACE utilisateur, afin de mieux utiliser un
AsyncTask
(doit être appelée à partir de l'UI thread!):OriginalL'auteur Timo Bähr