Je ne suis pas un programmeur Android, mais, en guise de conseil général, je dirais que vous devriez effectuer le sommeil, mieux dit l'attente, sur un autre thread et exécuter à la fin de la période d'attente, sur le principal thread, une méthode qui active la visibilité de votre imageview. Pour entrer dans des détails plus spécifiques, je dirais que vous devez utiliser un objet Handler car vous ne pouvez pas mettre à jour la plupart des objets d'interface utilisateur dans un thread séparé. Lorsque vous envoyez un message au gestionnaire il être sauvé dans une file d'attente et sont exécutées par le thread d'interface utilisateur le plus rapidement possible:
public class MyActivity extends Activity {
// Handler needed for callbacks to the UI thread
final Handler mHandler = new Handler();
// Create runnable for posting
final Runnable mUpdateUIState = new Runnable() {
public void run() {
updateUIState();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[ . . . ]
}
protected void startToggle() {
// Fire off a thread to do the waiting
Thread t = new Thread() {
public void run() {
Thread.Sleep(5000);
mHandler.post(mUpdateUIState);
}
};
t.start();
}
private void updateUiState() {
// Back in the UI thread -- toggle imageview's visibility
imageview.setVisibility(1 - imageview.getVisibility());
}
}
ou, un extrait d'une version plus courte,
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
imageview.setVisibility(1 - imageview.getVisibility());
}
}, 5000);
en utilisant la méthode postDelayed
, qui incorpore le délai dans la logique d'écriture de message.