2014-01-06 21 views
1

我上的應用程序的工作應該下載來自網絡的每X秒,以檢查是否有任何變化的文件來執行,我使用的服務要做到這一點,但它的執行力沒有固定的延時率,這是我的服務代碼:如何安排的機器人服務以固定速率


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 
    checkUpdate(); 
    return START_STICKY; 
} 

private Void checkUpdate() { 
    timer.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 
       Log.i("Service", String.valueOf(++counter)); 
       if(Helper.isNetworkAvailable(getBaseContext())) { 
         // download file 
       } else { 
         Log.e("ServiceHandler", "Couldn't get any data from the url"); 
        } 
       }else { 
        Log.e("Connection", "No connection"); 
       } 
      } 
     }, 10000, 10000); 
    return null; 
} 

輸出是不固定的,它應該是每10秒運行,運行的服務運行,而以隨機方式

+0

,什麼是不與您現有的代碼的工作? – kiruwka

回答

2

怎麼樣的IntentService內設立AlarmManager?更準確。

Intent intent = new Intent(context, YourClass.class); 
PendingIntent pi = PendingIntent.getService(context, 0, intent, 0); 
AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 10*1000, pi); 

內YourClass.class(這是一個IntentService)確保,把你的邏輯在handleIntent(意向意圖),這將是每10秒通過的PendingIntent由AlarmManager發送調用。

P.S.更新您的清單

希望它可以幫助

+0

即使我使用的是服務而不是完美工作的意圖服務,謝謝 – Mahmoud

0

對於重複的作業Android提供了簡單的API,稱爲定時器敬請期待吧。使用非常簡單。

0

試試這個:

@Override 
     public void onStart(Intent intent, int startId) { 

      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      Log.d("Internet Available: ", ""+flag); 

      Calendar cal = Calendar.getInstance(); 
      cal.add(Calendar.SECOND, 10); 

      Intent intent1 = new Intent(this, UpdateWidgetServiceDemo.class); 

      PendingIntent pintent = PendingIntent.getService(this, 0, intent1, 0); 

      AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      int i; 
      i=15; 

      alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent); 


     super.onStart(intent, startId); 
     } 

REMOVE return START_STICKY;

+0

向我提供您的反饋,如果我的答案可接受,請接受此問題。 –

+0

你的代碼對我來說很難理解,但是謝謝你的嘗試,這看起來可行,但我不能使用代碼,我不知道它應該如何工作。 – Mahmoud

+0

沒關係,我親愛的朋友。 –