我希望得到一些关于如何处理操作系统杀死长期运行服务的指导。
业务场景:
应用程序记录BTT曲目,该曲目可能持续数小时。它还可以在地图上显示轨迹以及相关的统计数据。
应用程序用户界面使用户能够开始/停止轨道记录并查看地图上的实时轨道。
在开始音轨记录后,用户可以退出应用程序并关闭屏幕(以节省电力),并且只有一个服务将继续运行以保持记录更新到数据库(如图所示),直到用户再次启动该活动并要求停止记录,这导致服务终止。
问题:
经过40分钟到一个半小时的可变时间后,录制服务会在没有任何警告的情况下被终止。由于BTT出游可能需要几个小时,这会导致轨迹记录不完整。
一些其他信息:
服务使用START_STICKY
启动,并获取一个PARTIAL_WAKE_LOCK
,并在与主活动相同的进程中运行。
以用户定义的速率(从1秒到几分钟)获取(并记录)新位置。我从Android文档中了解到,这是长时间运行服务的预期操作系统行为。
问题:
要使行为良好的应用程序能够满足业务场景需求,最好的体系结构设计方法是什么?
我可以想到几个选择(我不喜欢它们中的任何一个),但我希望有人指导我如何面对和解决类似的问题:
感谢所有能在这个主题上分享一些智慧的人。
发布于 2012-10-02 23:13:19
我有一个应用程序可以做类似的事情。我通过将其设置为前台任务来确保服务继续运行。当我准备好开始运行时,我调用此函数,它还设置了一个通知:
void fg() {
Notification notification = new Notification(R.drawable.logstatus,
"Logging On", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, LoggerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(this, "Logger","Logger Running",
pendingIntent);
startForeground(1, notification);
}
然后在日志记录完成后退出前台模式:
stopForeground(true);
https://stackoverflow.com/questions/12692636
复制相似问题