Android 安卓正在扼杀我的服务?
使用BroadCastReceiver,我在智能手机启动时执行服务:Android 安卓正在扼杀我的服务?,android,service,broadcastreceiver,android-service,android-background,Android,Service,Broadcastreceiver,Android Service,Android Background,使用BroadCastReceiver,我在智能手机启动时执行服务: public class BootReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent startServiceIntent = new Intent(context, MyService.class); context.startService(s
public class BootReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent startServiceIntent = new Intent(context, MyService.class);
context.startService(startServiceIntent);
}
}
我的服务:
private Runnable myRunnable = new Runnable() {
public void run() {
parsing.cancel(true);
parsing = new Parsing();
parsing.execute();
handler.postDelayed(this, timeoutUpdate);
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handler.removeCallbacks(myRunnable);
handler.postDelayed(myRunnable, 1000);
return Service.START_STICKY;
}
该服务实际上是在启动时执行的,但如果我在执行之间设置了1小时的超时,则不会执行该服务(可能系统正在终止它)。否则,如果我在重复之间设置60秒,所有操作都有效。
我怎么做?谢谢。为您的服务设置最高优先级
<intent-filter
android:priority="integer" >
</intent-filter>
该值必须是整数,例如“100”。数字越高,优先级越高。默认值为0。该值必须大于-1000且小于1000。您可以在使用中运行服务 前台服务是一种被认为是某种东西的服务 用户主动意识到,因此不是系统的候选者 在内存不足时杀死 但请记住,前台服务必须为状态栏提供通知(请参阅此处),并且除非服务停止或从前台删除,否则不能取消通知 注意:这仍然不能绝对保证在极低内存条件下不会终止服务。这只会降低它被杀死的可能性 或 如果不希望在前台运行服务,则可以使用定期运行服务 更新 使用取消注册的事件
Intent intent = new Intent(context, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pintent);
在broadcastReceiver
中计划作业使用Intent intent = new Intent(context, MyService.class);
PendingIntent pintent = PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm. setRepeating(AlarmManager.RTC_WAKEUP, triggerInMillis, intervalMillis, pintent);
系统将唤醒您的服务,然后您将能够立即执行任务。您好,您的Alarm Manager解决方案应该在我的启动接收器类中实现?是的,它应该在接收器和MainActivity中实现,因为当您安装应用程序时,Alarm Manager是通过MainActivity注册的,我如何停止以这种方式启动的服务?如果用户从主活动中禁用自动更新,并且服务自启动以来一直在执行,我如何停止它?我的朋友,我正在测试您的解决方案,如果一切正常,我将以此作为答案。我使用的不是cal.GetTimeMillis(),而是System.currentTimeMillis(),对吗?是的,您可以使用System.currentTimeMillis()+1000*60*60四小时间隔。这样,我的服务在所有执行之后都会被销毁,并每小时重新创建一次。请阅读有关该服务的文档。每个context.startService都会影响对onStartCommand()的调用。系统不会破坏正在运行的服务。将使用现有实例。
Intent intent = new Intent(context, MyService.class);
PendingIntent pintent = PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm. setRepeating(AlarmManager.RTC_WAKEUP, triggerInMillis, intervalMillis, pintent);