如何重复调用intentservice onHandleIntent方法而不创建新的intentservice

时间:2015-10-26 14:55:26

标签: android alarmmanager intentservice

我每隔5秒就有一个由alarmmanager调用的intentservice类。 Alarmmanager调用intentservice,它工作正常。但是当它调用时,它会创建新的intentservice。我只想调用intentService的onHandleIntent方法,不想创建新方法。这是我的代码:

IntentService类:

public class MyIntentService extends IntentService {
   private static final String serviceName = "MyIntentService";

   public MyIntentService() {
       super(serviceName);
   }

   public void onCreate() {
       super.onCreate();
       Log.d("Servis", "onCreate()"); //this is called every 5 seconds too
   }

   @Override
   protected void onHandleIntent(Intent intent) {
     //do something
   }
}

为IntentService设置alarmManager

public void setAlarm(View v)
{
        Calendar cal = Calendar.getInstance();
        AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        long interval = 1000 * 5;
        Intent serviceIntent = new Intent(context, MyIntentService.class);

        PendingIntent servicePendingIntent = 
                PendingIntent.getService(context, 12345, serviceIntent,PendingIntent.FLAG_CANCEL_CURRENT);

        am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),interval, servicePendingIntent
        );
}

1 个答案:

答案 0 :(得分:1)

  

我每隔5秒就有一个由alarmmanager调用的intentservice类。

这不适用于Android 5.1及更高版本,其中最短setRepeating()周期为60秒。此外,请记住,在Android 6.0及更高版本中,打盹模式和应用待机模式意味着您无法在一天中的大部分时间内获得控制权。

  

但是当它调用时,它会创建新的intentservice。

这是IntentService背后的一点。 IntentService结束后会销毁onHandleIntent()

  

我只想调用intentService的onHandleIntent方法,不想创建新方法。

然后不要使用IntentService。使用Service,覆盖onStartCommand()代替onHandleIntent(),并执行您自己的背景线程逻辑。确保在不再需要服务时停止服务(例如,stopSelf())。