Android 安卓正在扼杀我的服务?

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

使用BroadCastReceiver,我在智能手机启动时执行服务:

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);