Dans Handler, nous pouvons transmettre des données à partir d'un fil d'arrière-plan du thread d'interface utilisateur comme ceci:Transmission de données du thread bg au thread UI à l'aide du gestionnaire?
private void someBackgroundThreadOperation() {
final String data = "hello";
handler.post(new Runnable() {
public void run() {
Log.d(TAG, "Message from bg thread: " + data);
}
}
}
Si nous utilisons ce qui précède, nous ne pouvons pas utiliser alors Handler.removeCallbacks (Runnable r), parce que nous avons gagné » t avoir des références à l'une des runnables anonymes que nous avons créé ci-dessus.
Nous pourrions créer une seule instance Runnable, et après que le gestionnaire, mais il ne nous permettra pas de passer des données par:
private void someBackgroundThreadOperation() {
String data = "hello";
handler.post(mRunnable); // can't pass 'data' through.
}
private Runnable mRunnable = new Runnable() {
public void run() {
Log.d(TAG, "What data?");
}
}
Nous pouvons cependant utiliser les Handler.removeCallbacks (mRunnable) méthode alors, puisque nous avons une référence à celui-ci. Je sais que je peux configurer moi-même la synchronisation pour que la deuxième méthode fonctionne, mais je me demande si Handler offre un utilitaire pour passer des données à un seul Runnable référencé, comme dans l'exemple ci-dessus?
Le plus proche que je peux penser de parcourir les documents est d'utiliser quelque chose comme:
private void someUiThreadSetup() {
mHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
String data = (String)msg.obj;
return false;
}
});
}
private void someBackgroundThreadOperation() {
String data = "please work";
Message msg = mHandler.obtain(0, data);
mHandler.sendMessage(msg);
}
private void cleanup() {
mHandler.removeMessages(0);
}
Est-ce la bonne façon de le faire?
Merci
Je l'utilise plusieurs fois (String data = (String) msg.obj;) –