2014-01-30 39 views
1

我有定時器內的Android服務我需要這個定時器啓動一次,並且我有多次調用此服務。每次撥打startService()時,服務啓動新計時器(計時器執行的工作量與調用startService()的次數相同)。Android - 定時器內服務

這是代碼

private TimerTask notificationTask = new TimerTask() { 
    @Override 
    public void run() { 
     posNotification(); 
    } 
}; 

    @Override 
public void onCreate() { 
    super.onCreate(); 
    notificationTimer.schedule(notificationTask, 1000L, 10 * 1000L); 
} 

回答

1

您可以在共享的喜好保持一個值或採取一個全局變量。最初將其設置爲0。當服務被調用時,檢查值。如果它是0,則啓動定時器並將全局值設置爲1.所以下一次,它不會啓動您的定時器。這對你有意義嗎?請看看我準備了一個示例代碼,讓我知道它是否解決您的問題:

package com.example.timerinservice; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 

    Button btnStartService; 
    Context context; 
    int service_count = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     context = MainActivity.this; 
     btnStartService = (Button) findViewById(R.id.buttonStartService); 

     btnStartService.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent intent = new Intent(context, TimerService.class); 
       intent.putExtra("servicecount", service_count); 
       context.startService(intent); 
       service_count++; 
      } 
     }); 
    } 

} 

----------------- 
package com.example.timerinservice; 

public class GlobalVariable { 
    public static boolean TIMER_STYARTED = false; 
} 
----------------- 
package com.example.timerinservice; 

import java.util.Timer; 
import java.util.TimerTask; 

import android.app.IntentService; 
import android.content.Intent; 
import android.util.Log; 

public class TimerService extends IntentService { 

    Timer notificationTimer; 
    int get_service_count = 0; 

    public TimerService() { 
     super("timerservice"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     get_service_count = intent.getExtras().getInt("servicecount"); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     if(!GlobalVariable.TIMER_STYARTED){ 
      notificationTimer = new Timer(); 
      notificationTimer.schedule(notificationTask, 1000L, 10 * 1000L); 

      GlobalVariable.TIMER_STYARTED = true; 
     } 

    } 

    private TimerTask notificationTask = new TimerTask() { 
     @Override 
     public void run() { 
      //posNotification(); 
      Log.d("INSIDE","run() of TimerTask for: "+get_service_count); 
     } 
    }; 
} 
+0

我嘗試了全局變量,它不工作 –

+0

請找上面編輯的代碼,讓我知道,如果它解決您的問題。 – sUndeep