2013-02-18 4 views
11

Je suis ce tutoriel pour avoir un écran de chargement dans mon programme. Le tutoriel dit que mon activité devrait Sleep() en utilisant la commande Sleep(), mais elle ne reconnaît pas Sleep() comme une fonction et me fournit une erreur, me demandant si je voudrais créer une méthode appelée Sleep().Sleep() dans Java (Android)

Voici un lien vers le tutoriel:

http://androidcookbook.com/Recipe.seam;jsessionid=4DBCC1688B51DB16A2A40A86E135D361?recipeId=1599

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); 
    } 
} 
+6

Thread.sleep (1000); –

+2

Vous essayez de combiner 'sleep()' avec Handler, ce qui est inutile puisque 'postDelay()' va déjà introduire un délai. Si vous voulez un délai plus long, augmentez 'WAIT_TIME'. – Sam

+2

Je pense qu'il vaut la peine de souligner, que ce n'est pas une bonne idée d'utiliser un écran de chargement, juste pour le faire. Je comprends que vous suivez un tutoriel, et c'est bien.Mais une fois que vous êtes sur le point de créer quelque chose pour les utilisateurs, ne leur faites pas attendre plus longtemps que nécessaire. Si vous avez des données à charger, faites-le et montrez un splash pendant le chargement, mais ne pas coder un temps d'attente arbitraire. Vous allez juste perdre leur temps. – FoamyGuy

Répondre

31

Vous pouvez utiliser l'une des méthodes folllowing:

Thread.sleep(timeInMills); 

ou

SystemClock.sleep(timeInMills); 

SystemClock.sleep(milliseconds) est une fonction d'utilité très similaire à Thread.sleep(milliseconds), mais il ne tient pas compte InterruptedException. Utilisez cette fonction pour les retards si vous n'utilisez pas Thread.interrupt(), car elle préservera l'état interrompu du thread.

6

La fonction est Thread.sleep(long).

Notez toutefois que vous ne devez pas effectuer de veille sur le thread d'interface utilisateur.

4

Le code que vous avez posté est horrible. Veuillez ne pas l'utiliser sur un appareil réel. Vous obtiendrez une erreur "Application ne répondant 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, appeler le new Handler().post(... sur le thread UI exécutera le runnable sur le thread UI, y compris cette "opération de longue durée". L'avantage est que vous pouvez créer un gestionnaire pour le thread UI que vous pouvez utiliser plus tard, comme indiqué ci-dessous.

Pour placer l'opération de longue durée dans un thread d'arrière-plan, vous devez créer un thread autour de la table de lancement, comme illustré ci-dessous. Maintenant, si vous voulez mettre à jour l'interface utilisateur une fois l'opération de longue durée terminée, vous devez l'envoyer au thread de l'interface utilisateur à l'aide d'un gestionnaire.

Notez que cette fonctionnalité est parfaite pour un AsyncTask qui rendra cette apparence beaucoup plus propre que le modèle ci-dessous. Cependant, j'ai inclus ceci pour montrer comment Handlers, Threads et Runnables se rapportent.

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(); 
} 
1

utilisez Thread.sleep (1000);

1000 est le nombre de millisecondes que le programme 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é, car il est un retard de temps, mais sans contrôle et peut avoir besoin de plus ou moins de temps.