2010-10-31 8 views
0

J'ai une classe de service dans mon application Android qui utilise une minuterie. La minuterie est réglée pour fonctionner avec un retard de 1min (60000ms). Je veux que l'utilisateur puisse changer dynamiquement ce délai. Normalement, en java je pourrais juste utiliser timer.setDelay(); mais Android n'a pas cette fonction.Android timer set delay

classe de service à ce jour:

public class LocalService extends Service 
{ 
    Timer timer = new Timer(); 
    int newDelay; 

    public IBinder onBind(Intent arg0) 
    { 
     return null; 
    } 

    public void onCreate() 
    { 
     super.onCreate(); 
     startService(); 
    } 

    private void startService() 
    {  
     timer.scheduleAtFixedRate(new TimerTask() 
     { 
      public void run() 
      {  
       mainTask(); 
      } 
     }, 0, 60000); 
    } 

    private void mainTask() 
    { 
     //do something 
    } 

    private void shutdownService() 
    { 
     if (timer != null) timer.cancel(); 
    } 

    public void onDestroy() 
    {  
     super.onDestroy(); 
     shutdownService(); 
    } 

    private void readNewDelay() 
    { 
     InputStream in = openFileInput("updateDelay"); 
     if(in != null) 
     { 
      InputStreamReader input = new InputStreamReader(in); 
      BufferedReader buffreader = new BufferedReader(input); 
      newDelay = Integer.parseInt(buffreader.readLine()) * 60000; //value in file is saved in minutes 
     }  
     in.close(); 
    } 
} 

Le retard que je veux est enregistré dans un fichier texte par une activité. Je veux ensuite que le service lise ce fichier et mette à jour son délai de temporisation en conséquence.

Répondre

1

Vous devrez détruire l'objet Timer et en créer un nouveau. N'oubliez pas que les minuteries ne fonctionnent pas lorsque le téléphone est en veille. Une meilleure façon est d'utiliser une alerte au lieu d'une minuterie.