2012-07-26 54 views
0

我有一个服务运行,每x分钟更新数据,我希望用户选择更新频率(每10分钟,30分钟...)。我使用了sharedpreferences,但似乎该服务不会更改更新的频率。 这里是我的服务代码:Android:更改在后台运行的服务的更新间隔

public void onCreate() 
    { 

     super.onCreate();  

     _startService(); 

    // if (MAIN_ACTIVITY != null) Log.d(getClass().getSimpleName(), "FileScannerService started"); 
    } 
    /* 
    * starting the service 
    */ 
    private void _startService() 
    { 

     timer.scheduleAtFixedRate( 

       new TimerTask() { 

        public void run() { 

         try{ 

         doServiceWork(); 

         Thread.sleep(UPDATE_INTERVAL); 

         }catch(InterruptedException ie){ 

          Log.e(getClass().getSimpleName(), "FileScannerService InterruptedException"+ie.toString()); 
         } 

        } 
        }, 
        DELAY_INTERVAL, 
        UPDATE_INTERVAL); 

     Log.i(getClass().getSimpleName(), "FileScannerService Timer started...."); 
    } 

这里是我的sharedpreferences代码:

  SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    String interval= SP.getString("synchronisation", "1"); 
    if(interval.equals("1")) UPDATE_INTERVAL= 30000; 
    if(interval.equals("2")) UPDATE_INTERVAL= 60000; 
    if(interval.equals("3")) UPDATE_INTERVAL= 120000; 

我试图处处把sharedpreferences代码在我的服务方法,但它不能正常工作。也许我错了。 在此先感谢您的帮助。

+0

您可能想要使用[AlarmManager](http://developer.android.com/reference/android/app/AlarmManager.html#setInexactRepeating%28int,%20long,%20long,%20android.app.PendingIntent%29 ),因为它专门设计用于安排Android中的事物。 – wsanville 2012-07-26 13:50:40

+0

而不是timerTask,它不是一回事,因为定时器中有一个update_interval? – 2012-07-26 13:53:06

回答

0

我发现这个问题的解决方案,如果你使用sharedpreferences来改变计时器的更新延迟,你应该使你的服务工作于run()方法而不是调用另一个方法。例如:在我的代码中,我调用了方法do service work(),当我删除方法调用并直接使用此方法的代码时,它就起作用了。 希望我解释得对。