我创建了一个自定义后台服务,它正在扩展IntentService。当我的应用程序进入后台时,我会调用这个类。startService()。Firsly onStartCommand在我返回START_STICKY的地方被调用(就像我读过一些其他帖子,以保持我的服务处于活动状态,并在由于内存不足而被终止时根据需要重新创建)。在那之后,我将实现onHandleIntent(intent)方法,从调用者intent中获取额外的内容,在这里我将启动一个计时器,每分钟运行一次,并执行简单的代码。但这里的问题是,当应用程序处于后台时,30分钟后,我的服务被终止,而不是重新创建。这是我代码的一部分,所以任何建议都是完美的。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
protected void onHandleIntent(Intent workIntent) {
//here I'm initializing the Timer
}
class UpdateTimeTask2 extends TimerTask {
public void run() {
backgroundTimer();//here I'm doing some simple coding
}
}
在这种情况下,您只需要一个正常的服务和一个处理程序。正如Pankaj所写,IntentService不是长时间运行操作的设计者。然后,您可以使用处理程序的postDelayed方法每分钟执行一次代码。
所以,正如库马尔所说,我应该扩展服务,而不是意图服务。服务的调用与IntentService的调用相同,唯一的区别是服务类所需的未实现方法。我还使用了Handler的postDelayed方法,而不是Timer,在OnStartCom中,我返回START_STICKY。所以这项服务根本没有被终止。有用的代码可以在这里和这里找到。我希望这有帮助。
我正在构建一个应用程序,即使应用程序在后台,也需要保持位置跟踪。基本上,我正在使用播放服务的GoogleApiClient和LocationServices。FusedLocationApi.request位置更新方法来调用IntentService。 下面的代码是我如何在活动的后台触发位置更新: 效果很好 但是,当用户(通过任务管理器)终止应用程序时,我想停止此IntentService(称为L
onMessageReceived(RemoteMessage RemoteMessage)在应用程序处于后台时未调用或仅显示{“body”:“test”,“title”:“test notification}之类的json字符串
问题内容: 我需要将会话保留30分钟,然后销毁它。 问题答案: 您应该自己实现会话超时。其他人提到的两个选项_session.gc_maxlifetime_和_session.cookie_lifetime_都不可靠。我将解释其原因。 第一: session.gc_maxlifetime session.gc_maxlifetime 指定秒数,此后将数据视为“垃圾”并清除。垃圾收集在会话开始期间发
当应用程序位于前台时,能够从推送通知接收数据 用于使用firebase云消息服务的推送通知。 如果可能的话,你能建议我摆脱这个问题吗。 谢谢你。