Android上长时间运行的服务的最佳体系结构是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (9)

业务场景:

应用程序记录一个可能持续几个小时的BTT轨道。它还可以显示地图上的轨迹以及相关的统计数据。

应用程序用户界面使用户能够开始/停止跟踪记录并查看地图上的实时轨迹。

问题:

经过40分钟到1小时半的可变时间之后,录制服务在没有任何警告的情况下死亡。由于BTT出场可能需要几个小时,这导致跟踪记录不完整。

一些额外的信息:

服务开始START_STICKY并获得一个PARTIAL_WAKE_LOCK,并且运行在与主要活动相同的过程中。

以1秒到几分钟的用户定义速率获取(并记录)新位置。我从Android文档了解到,这是长期运行服务的预期操作系统行为。

题:

具有能够满足业务场景需求的良好行为应用程序的最佳体系结构设计方法是什么?

我可以想到几个选项(我不喜欢其中的任何一个),但是我想从某人的指导中解决类似的问题:

  • 使用广播接收器(理想情况下连接到位置管理器,如果可能的话)只在获取新位置时才使服务运行?
  • 不要让用户离开主要活动(导致倾注用户体验)?
  • 警报广播接收器是否需要重新启动服务?
提问于
用户回答回答于

我有一个应用程序做了一个非常类似的事情。我确保该服务通过使其成为前台任务而继续运行。当我准备好开始运行时,我会调用这个函数,它也会建立一个通知:

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

扫码关注云+社区