2014-01-30 3 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

Смежные вопросы