我已经开发了一个在活动开始时自动启动的服务。 但是我希望在一定时间间隔10秒后停止服务,并在30秒后说一段时间后再次开始服务。 我对android编程有点新,所以没有得到如何做到这一点,请帮忙。 我正在使用广播接收器来启动服务。
答案 0 :(得分:5)
我建议使用警报管理器并发送待处理的意图来启动服务。很像这样:
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);
答案 1 :(得分:1)
你需要将你的任务分解成比这更原始的部分。然后你可以看到谷歌需要什么,并将获得更好的结果:)
此外(优越方法),使用警报管理器how to schedule some code execution in android or: what exactly are daemon threads in android?
答案 2 :(得分:0)
刚写了一个你和其他人可以使用的实用工具:
userService
和
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);
}
}
}