如何创建连续运行的Android服务?

时间:2014-06-29 18:04:17

标签: android

我想在不使用Push Notifications等外部服务的情况下通知我的用户我最新版Android游戏中提供的新内容。

作为实现此目标的第一步,我想做的是只创建有关应用程序更新的标准通知。

这让我想到了一个问题:是否有可能在用户第一次启动游戏时启动服务,然后让它无限期地运行?我希望在更新完成后让它继续运行。由于服务代码可能在不同版本之间发生了变化,我是否需要手动停止旧版本的服务并启动新版本?是否有可能甚至做这样的事情,推动服务启动的事件是完成应用程序更新?

我的计划是让此服务检查一些关于上次用户收到新内容通知的持久数据,并根据此情况确定是否应在更新后为他们创建通知。

重要的是,他们不需要在更新后返回游戏,以便创建通知。这是我现在遇到的问题。自动更新发生,他们不知道,因此也不知道有新的阶段等可用,所以如果他们已经完成了以前可用的内容,他们永远不会回到游戏中。

似乎像Family Guy这样的游戏已经采用了这种方法,但我不确定他们是否以这种方式实现了它。即使在我更新之后,即使我自更新以来没有实际执行该应用程序,我仍会收到通知。

3 个答案:

答案 0 :(得分:0)

当其他进程需要资源时,服务大多被杀死。因此使用

startForground(...)

用于在后台无限制地运行服务。

见这里:http://developer.android.com/reference/android/app/Service.html#startForeground(int,android.app.Notification)

答案 1 :(得分:0)

您可以使用服务中的AlarmManager在特定时间通知您。启动服务,执行任务并再次设置警报以通知您。通过这种方式,您可以定期无限期地运行您的服务。

答案 2 :(得分:0)

  

我开始在你之前在GameDev Stack Exchange上编写这个答案   删除了这个问题。与那个告诉你删除的人不同,我认为即使对于游戏开发堆栈交换也是一个有趣的问题。

你描述的是一个关于android的坏习惯。我不相信任何游戏都这样做。更重要的是,android需要"服务"应用程序以ForegroundService运行(这会强制您在通知栏中显示应用程序图标,以便用户始终了解正在运行的服务)当系统缺少内存时,它也可以随机被杀死。但是,可以使用AlarmsAlarmManager很好地实现它。

服务和通知:

但是,您可以使用AlarmManager在应用运行时安排意图,这是一种很好的做法。让我们来看一个简单的例子:Candy Crush。

在“糖果粉碎”中,当你失去上一次生命时,你每30分钟就能恢复一次,并且有5次生命限制。您希望在他的一生都回来时通知用户。怎么做?

例1:

  • 当用户失去生命或退出游戏时,请在(5-number_of_life)* 30分钟内安排使用AlarmManager的意图,以触发本地通知。

例2:

  • 每隔30分钟使用AlarmManager计划一次意图以检查生命数,并在用户再次有5条生命时发出通知。

使用启动接收器还可以让您在设备启动后立即安排工作。

但是,用户希望能够禁用此类功能。

更新:

如果您希望应用在更新可用时通知用户,您需要以某种方式在服务器上通过请求检查互联网。您可以再次使用警报管理器安排意图,以定期检查更新是否可用。如果用户是游戏用户,您也可以定期查看。

很多"在线"游戏就是这么做的,只需强迫用户从Play商店下载新的更新,然后再玩一次。