Java android应用程序能否在后台连续运行?

Java android应用程序能否在后台连续运行?,java,android,Java,Android,我正在尝试开发一个android应用程序,它将在后台连续运行,收集加速度传感器数据(每2分钟一次)。我已经扩展了服务类并实现了“onSensorChanged”方法。为了记录数据,我使用了一个类,该类在文件中写入相同的数据。文件编写器类扩展了“AsyncTask”,并且该操作已在方法“doInBackground”中编码 我已经尝试了以下链接: ,, . 尽管我已经尝试实现了所建议的内容,但文件日志仍然清楚地显示,有很大一部分时间(甚至12小时)没有数据。尽管据我所知,加速度传感器总是产生一些数

我正在尝试开发一个android应用程序,它将在后台连续运行,收集加速度传感器数据(每2分钟一次)。我已经扩展了服务类并实现了“
onSensorChanged
”方法。为了记录数据,我使用了一个类,该类在文件中写入相同的数据。文件编写器类扩展了“
AsyncTask
”,并且该操作已在方法“
doInBackground
”中编码

我已经尝试了以下链接: ,, .
尽管我已经尝试实现了所建议的内容,但文件日志仍然清楚地显示,有很大一部分时间(甚至12小时)没有数据。尽管据我所知,加速度传感器总是产生一些数据。此外,当我只需点击应用程序时,就会生成数据日志。文件被写入15分钟(这也不是静态的),然后应用程序不再记录数据。
任何建议都会大有帮助。已经卡住一个月了。提前感谢。

如果您想要一个连续运行的服务,您应该使用它,因为正如前面所解释的,当内存不足时,后台服务可能会被o.s.终止

前台服务是用户主动意识到的服务,当内存不足时,它不是系统要终止的候选服务。前台服务必须为状态栏提供通知,该状态栏位于正在进行的标题下。这意味着,除非服务停止或从前台删除,否则无法取消通知


如果您希望对并行性进行更多控制,还可以在单独的线程中创建服务。

您不能保证系统在需要ram时不会关闭服务。还有一点需要担心(我不知道确切的互动)。您最好使用start_STICKY启动服务,操作系统会尽快重新启动它

作为一种解决方案,您可以查看AlarmManager,尽管我知道它更多地用于安排一次性操作


另一件要调查的事情是课堂。如果您需要支持低于21的api,那么

也提供了一个开源实现。请详细解释这将如何解决问题中提出的问题。根据您的经验,我可以告诉您,即使是前台服务也将被终止。您可以通过谷歌搜索用户在已知的前台服务(如播放音乐)中遇到的问题。@m0skit0“是”,如果用户(使用某些应用程序管理器)杀死了它,或者当设备关闭时。但不是因为内存不足。当设备关闭时,真的吗?我永远也猜不到。无论如何,我可以告诉你,一个前台服务将在这些周期之外被终止。我仍然不知道它为什么会发生,但它确实发生了。@m0skit0当然关于“关闭”我很讽刺;)。我根据android官方文档提供了这些信息。我自己的想法并不是假设,“尽管据我所知,加速度传感器总是产生一些数据”——如果设备处于睡眠模式,则不会。你不能在Android 6.0+上无限期地保持设备处于唤醒状态,除非你的应用被添加到电池优化白名单中。打瞌睡模式可能是你的问题:Thanke@Commonware可能重复。我已经尝试使用START\u STICKY。还是不走运。我还尝试使用单独的线程(甚至在报警管理器中)来管理线程级别的并行性。但令人担忧的是,该应用程序似乎在一段时间后自行关闭。可以停止吗?好的,如果您的服务不是系统服务(因此需要根目录),那么无法保证它会继续运行。在我5年的服务制作经验中,Android最终会杀死它,特别是在最新版本上。请详细解释这将如何解决问题中提出的问题。