Je suis ce tutoriel pour avoir un écran de chargement dans mon programme. Le didacticiel indique que mon activité devrait Sleep () à l'aide de la commande Sleep (), mais il ne reconnaît pas Sleep () comme une fonction et me fournit une erreur, me demandant si je souhaite créer une méthode appelée Sleep ().
Voici l'exemple de code:
public class LoadingScreenActivity extends Activity {
//Introduce an delay
private final int WAIT_TIME = 2500;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
System.out.println("LoadingScreenActivity screen started");
setContentView(R.layout.loading_screen);
findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
//Simulating a long running task
this.Sleep(1000);
System.out.println("Going to Profile Data");
/* Create an Intent that will start the ProfileData-Activity. */
Intent mainIntent = new Intent(LoadingScreenActivity.this,ProfileData.class);
LoadingScreenActivity.this.startActivity(mainIntent);
LoadingScreenActivity.this.finish();
}
}, WAIT_TIME);
}
}
Vous pouvez utiliser l'une des méthodes suivantes:
Thread.sleep(timeInMills);
ou
SystemClock.sleep(timeInMills);
SystemClock.sleep(milliseconds)
est une fonction utilitaire très similaire à Thread.sleep(milliseconds)
, mais elle ignore InterruptedException
. Utilisez cette fonction pour les retards si vous n'utilisez pas Thread.interrupt()
, car elle préservera l'état interrompu du thread.
La fonction est Thread.sleep(long)
.
Notez cependant que vous ne devez pas effectuer une mise en veille sur le thread d'interface utilisateur.
Le code que vous avez publié est horrible. Veuillez ne pas l'utiliser sur un appareil réel. Vous obtiendrez une erreur "Application ne répond pas" si vous exécutez quelque chose de similaire à cela.
Si vous utilisez des gestionnaires, gardez à l'esprit qu'un gestionnaire est créé sur le thread où il s'exécute. Ainsi, l'appel de new Handler().post(...
sur le thread d'interface utilisateur exécutera l'exécutable sur le thread d'interface utilisateur, y compris cette "opération de longue durée". L'avantage est que vous pouvez créer un gestionnaire vers le thread d'interface utilisateur que vous pourrez utiliser ultérieurement, comme illustré ci-dessous.
Pour placer l'opération longue dans un thread d'arrière-plan, vous devez créer un thread autour du runnable, comme illustré ci-dessous. Maintenant, si vous souhaitez mettre à jour l'interface utilisateur une fois l'opération longue terminée, vous devez la publier sur le thread d'interface utilisateur, à l'aide d'un gestionnaire.
Notez que cette fonctionnalité est parfaitement adaptée à un AsyncTask
ce qui rendra cela beaucoup plus propre que le modèle ci-dessous. Cependant, je l'ai inclus pour montrer comment les gestionnaires, les threads et les runnables sont liés.
public class LoadingScreenActivity extends Activity {
//Introduce a delay
private final int WAIT_TIME = 2500;
private Handler uiHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHandler = new Handler(); // anything posted to this handler will run on the UI Thread
System.out.println("LoadingScreenActivity screen started");
setContentView(R.layout.loading_screen);
findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE);
Runnable onUi = new Runnable() {
@Override
public void run() {
// this will run on the main UI thread
Intent mainIntent = new Intent(LoadingScreenActivity.this,ProfileData.class);
LoadingScreenActivity.this.startActivity(mainIntent);
LoadingScreenActivity.this.finish();
}
};
Runnable background = new Runnable() {
@Override
public void run() {
// This is the delay
Thread.Sleep( WAIT_TIME );
// This will run on a background thread
//Simulating a long running task
Thread.Sleep(1000);
System.out.println("Going to Profile Data");
uiHandler.post( onUi );
}
};
new Thread( background ).start();
}
utilisez Thread.sleep (1000);
1000 est le nombre de millisecondes pendant lequel le programme se mettra en pause.
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
Gardez à l'esprit: L'utilisation de ce code n'est pas recommandée, car il s'agit d'un délai mais sans contrôle et peut nécessiter plus ou moins de temps.