我正在 CodenameOne 上开发 Android 应用程序,即使最小化也需要每 5 分钟发送一次 Web 请求。如何实现此行为以防止请求被操作系统停止或暂停?
4 回答
用于AlarmManager
设置每五分钟一次的操作。让它触发 a BroadcastReceiver
,然后将控制权传递给我的WakefulIntentService
(或您自己IntentService
的处理WakeLock
,您将需要这样设备在您工作时保持清醒)。让服务执行“网络请求”。
这仍然不能 100% 保证:
用户可以从设置中强制停止您,在这种情况下,您的警报会消失,并且在用户再次手动运行您的应用程序之前不会发生任何事情
用户可能会阻止警报在某些提供“耐力模式”或同等功能的设备上触发,例如各种 SONY Xperia 型号
但是,这是您将获得的最好的,没有推出您自己的 Android 操作系统版本。
其他人的答案是正确的,您需要创建一个服务,但他们以某种方式忽略了代号一的提及。
在 Codename One 下,您需要为 android 创建一个本机目录,然后将服务源代码放在那里(只需使用一个不做任何事情的空白服务类)。android.xapplication
然后,您需要将声明服务 XML 属性的选项添加到构建参数中。
话虽如此,您正在尝试做的事情是非常错误的,您不应该在 Android 中这样做!您将立即耗尽设备的电池寿命,并且该服务最终将被操作系统杀死(因为它会耗尽电池电量)。解决方案是向设备发送推送通知以唤醒应用程序。
你不能从活动中做到这一点,你需要创建后台服务。
http://developer.android.com/training/run-background-service/create-service.html
在 Android 9 及更高版本中,您可以通过电池设置防止您的应用进入睡眠状态。
长按您的应用程序 -> 应用程序信息 -> 电池 -> 优化电池消耗
在此处从列表中添加您的应用程序。
提示:菜单条目可能有不同的名称,具体取决于您的手机。