我已经开发了一个在活动开始时自行启动的服务。但我想在一定的时间间隔后停止服务,比如 10 秒,然后在一段时间后,比如 30 秒后再次启动服务。我对android编程有点陌生,所以不知道怎么做,请帮忙。我正在使用广播接收器来启动服务。
问问题
7316 次
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
你需要把你的任务分解成比这更原始的部分。然后你可以看到你需要谷歌搜索并获得更好的结果:)
另外(高级方法),使用警报管理器如何在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 回答