如何让我的安卓应用在后台持续运行以进行24/7连续传感器数据收集

9

我已经开发了一款用于收集移动和可穿戴式传感器数据的安卓应用程序。我希望这个应用程序可以在后台24/7运行而不被操作系统杀死。我知道长时间运行的利弊,但这是我的主要业务需求。

编辑:我将其设置为前台服务,并且只要我与手机保持交互,它就可以正常工作,但是如果我让它处于空闲状态,比如说4-5个小时,操作系统会将其杀死,尽管它被列为前台服务。


1
可能是如何在Android中使应用程序持续运行?的重复问题。 - Mocas
创建一个服务:请查看此链接 https://learn.microsoft.com/zh-cn/xamarin/android/app-fundamentals/services/ - B.mansouri
1
唯一的方法是使用前台服务。 - Vladyslav Matviienko
1
@Gauranga,你解决了吗?我也遇到了同样的问题。我希望应用程序在几天内保持活动状态,以便从蓝牙连接的可穿戴设备中收集数据。我也找到了前台服务的解决方案,但像你一样,当应用程序不活动几个小时后(例如当我睡觉时),它会被杀死。 - Simon Corcos
两年三个月后,我仍然面临同样的问题。最好的解决方法是使用AlarmManager定期(每几分钟)调用BroadcastReceived,进而调用前台服务,并使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS来避免待机桶。在服务中,我收集GPS数据和光传感器数据。该应用程序背景下运行了5天5小时,没有用户交互,一切顺利,但后来它神秘地被终止了。我已经尝试了下面提出的所有解决方案,但都无济于事。 - Franco
3个回答

6
在Android Marshmallow之后运行后台服务非常麻烦。Doze和StandBy模式会停止所有后台操作。即使使用作业调度程序或工作管理器,运行操作的最小间隔也为15分钟,即使设置小于此值也是如此。因此,您需要启动一个带有粘性通知的前台服务来完成工作。您可以查看这篇文章以了解如何开始使用前台服务。如果您的应用程序针对Android Pie,请不要忘记将这些权限放入清单文件中。您可以通过使用监听此操作的广播接收器在手机重新启动时重新运行服务。
<action android:name="android.intent.action.BOOT_COMPLETED" />

同时,您可以通过监听此操作来停止它。

 <action android:name="android.intent.action.ACTION_SHUTDOWN" />

1
我已将其设置为前台服务,并且只要我不断与手机交互,它就可以正常工作。但是,如果我让它闲置4-5个小时,操作系统会将其杀死,尽管它被列为前台服务。 - Gauranga
你的手机型号和操作系统是什么?@Gauranga - Ramzy Hassan
我正在使用小米红米4A和Android版本7.12.N2G47H。 - Gauranga
1
好的,这种情况发生是由于许多原因,非本地操作系统有时会终止前台服务以节省电池电量,因此您需要使您的应用程序不受操作系统自动管理。有时,如果有许多前台服务正在运行,则操作系统会删除较旧的服务,请查看以下链接:https://dev59.com/i2w15IYBdhLWcg3wYawx#14293528 @Gauranga - Ramzy Hassan

0

使用服务来收集数据,你可以在前台运行它,而且它不会被操作系统杀掉。


前台服务执行一些对用户可见的操作。例如,音频应用程序将使用前台服务播放音轨。前台服务必须显示通知。即使用户没有与应用程序交互,前台服务也会继续运行。 - Юра Околот
2
我已将其设置为前台服务,并且只要我不断与手机交互,它就可以正常工作。但是,如果我让它闲置4-5个小时,操作系统会将其杀死,尽管它被列为前台服务。 - Gauranga

0
将应用程序制作为启动器并将其设置为默认启动器。您可以按照此指南here进行操作。该想法是当手机启动时,操作系统会启动启动器,并且在系统内存不足时永远不会终止它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接