0

我已经开发了一个在活动开始时自行启动的服务。但我想在一定的时间间隔后停止服务,比如 10 秒,然后在一段时间后,比如 30 秒后再次启动服务。我对android编程有点陌生,所以不知道怎么做,请帮忙。我正在使用广播接收器来启动服务。

4

3 回答 3

6

我建议使用警报管理器并发送未决意图来启动服务。很像这样:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent serviceIntent = new Intent(context, ServiceReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, ServiceIdsConstants.SERVICE_ID,     serviceIntent , PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 30000, pi);

然后在 BroadcastReceiver 中执行以下操作:

Intent intent = new Intent(context, MyServiceService.class);
context.startService(intent);
于 2013-08-16T11:41:29.997 回答
2

你需要把你的任务分解成比这更原始的部分。然后你可以看到你需要谷歌搜索并获得更好的结果:)

  1. 使用调度程序在另一个线程上安排新任务
  2. “睡眠”线程X 毫秒。
  3. 使用您的意图和广播接收器启动您的服务

另外(高级方法),使用警报管理器如何在android中安排一些代码执行或者:android中的守护线程到底是什么?

于 2013-08-16T11:32:05.043 回答
0

刚刚编写了一个您和其他人可以使用的实用程序:

public static void startDelayedWakefulService(Context context,long delayInMillis,Class<? extends Service> serviceClass) {
    AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent serviceIntent = new Intent(context, DelayedStartServiceBroadcastReceiver.class);
    serviceIntent.putExtra("className",serviceClass.getName());
    PendingIntent pi= PendingIntent.getBroadcast(context, 7, serviceIntent , PendingIntent.FLAG_UPDATE_CURRENT);
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis()+delayInMillis, pi);
}

public class DelayedStartServiceBroadcastReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String className = intent.getStringExtra("className");
        try {
            startWakefulService(context,new Intent(context,Class.forName(className)) );
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            completeWakefulIntent(intent);
        }
    }
}

不要忘记将其添加到您的清单中

    <receiver
        android:name=".utils.DelayedStartServiceBroadcastReceiver"
        android:enabled="true"
        android:exported="true" >
    </receiver>
于 2016-08-03T18:13:05.487 回答