0

我有这个 IntentService:

public class ServiceUpdateNewResults extends IntentService{ 

private void setAlarmToCheckUpdates() {
    Calendar calendar = Calendar.getInstance();

    //calendar.add(Calendar.DAY_OF_YEAR, 1); //dema
    //calendar.set(Calendar.HOUR_OF_DAY, 22); //a les 10
    calendar.add(Calendar.SECOND, 20);

    Intent myIntent = new Intent(this.getApplicationContext(), ReceiverCheckUpdates.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, myIntent,0);
    AlarmManager alarmManager = (AlarmManager)this.getApplicationContext().getSystemService(this.getApplicationContext().ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
}

public ServiceUpdateNewResults() {
    super("ServiceUpdateNewResults");
}

@Override
protected void onHandleIntent(Intent intent) {
    //fem les coses.
    //Toast.makeText(this.getApplicationContext(), "holaa", Toast.LENGTH_LONG).show();
    setAlarmToCheckUpdates();

    Log.d("debugging","hello");
}

}

这是每 20 秒调用一次 BroadCastReceiver,最终调用此服务,这将“永远”发生。(未来将是 1 天,而不是 20 秒)。

这是接收器:

public class ReceiverCheckUpdates extends BroadcastReceiver{
Context context;
@Override
public void onReceive(Context context, Intent intent){
    this.context = context;
    Intent service1 = new Intent(context, ServiceUpdateNewResults.class);
    context.startService(service1);

}
}

这工作得很好,但如果我从 Android 设置中停止应用程序,该服务也会停止。我想避免这种情况。我希望如果应用程序关闭,服务应该继续工作。

可能吗? 实际上,服务何时被杀死

4

2 回答 2

2

如果我从 Android 设置中停止应用程序,该服务也会停止

如果通过“从 Android 设置停止应用程序”,您的意思是您按下强制停止按钮,您的应用程序将不会再次运行,直到手动运行您的组件之一(例如,用户启动您的活动)。更具体地说,在这种情况下,您的警报是计划外的。

我想避免这种情况。

然后不要按“强制停止”按钮。

我希望如果应用程序关闭,服务应该继续工作。

在任何非“强制停止”的情况下,警报将继续触发(至少直到设备入睡,鉴于您当前的实现)。

于 2013-09-26T21:54:39.883 回答
1

IntentService 是您应用程序的一部分。如果系统破坏了您的应用程序,它将破坏 IntentService。您可以通过将 IntentService 放在单独的进程中来减少发生这种情况的机会,但您无法阻止系统销毁 IntentService。您可以使系统极不可能破坏服务;为此,您使用“前台”服务。但是,除非您真的需要,否则您应该避免这样做。另外,你不能有前台IntentService,所以你必须添加你自己的后台Handler和HandlerThread。

于 2013-09-27T00:38:05.227 回答