web-dev-qa-db-fra.com

Sleep () dans Android Java

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);
    }
}
20
spogebob92

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.

48
Karan_Rana

La fonction est Thread.sleep(long) .

Notez cependant que vous ne devez pas effectuer une mise en veille sur le thread d'interface utilisateur.

6
MByD

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(); 
}
5
323go

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.

1
Leon pvc