2015-08-06 1 views
0

J'ai un service dans lequel je veux prendre des photos de l'utilisateur. J'ai une tâche de minuterieService Android prenant des photos en arrière-plan OnUiThread

 myTimer = new Timer(); 
    myTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      TimerMethod(); 
     } 

    }, 0, 3000); 

Et la méthode de minuterie

{

if (na != null) 
     zzz.runOnUiThread(Timer_Tick); 
} 

private Runnable Timer_Tick = new Runnable() { 
    public void run() { 

     takePhoto(getApplicationContext(), 1); 
    } 
}; 
de TimerMethod private void()

Mon problème est que si je runOnUiThread l'application fonctionne plus lentement.

Comment puis-je exécuter dans un autre thread qui n'influencera pas l'expérience utilisateur?

Merci beaucoup.

Répondre

0

Votre TimerTask est en cours d'exécution dans le thread principal, vous risquez de rendre l'application runnning slower.You besoin d'un nouveau thread pour exécuter la méthode TimerMethod, comme ceci:

myTimer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
      new Thread(new Runnable() { 

       @Override 
       public void run() { 
        TimerMethod(); 
       } 
      }).start(); 
     } 

    }, 0, 3000); 
+0

Bonjour, donc je devrais sauter zzz.runOnUiThread (Timer_Tick) et faire quelque chose comme ça? takePhoto (getApplicationContext(), 1); inste exécuter et supprimer timerMethod? –

+0

Le seul principe est que vous devez exécuter une méthode fastidieuse dans un nouveau thread, pas dans le thread principal. Les méthodes du service telles que onCreate(), onStartCommand() sont toutes exécutées dans le thread principal. – simonws