如何在应用程序关闭时检查更新?
How to check for updates when the app is closed?
我的应用程序非常简单:它使用 Picasso 从静态 URL 下载 JPG,然后显示它。然而 URL 背后的图片会定期更新,而不会更改 URL 本身。发生这种情况时,应用程序必须显示有关它的通知,即使应用程序自启动以来尚未启动。
我的问题是:推荐的现代方法是什么?
我最大的问题是很多教程和文档包含 3 年以上的信息,这很令人困惑,但它对我来说是正确的,而且还没有过时。
目前我的概念是有一个 BroadcastReceiver
订阅了一个启动事件。这会启动带有 Intent
的 JobService
,并且 onStartJob
方法会显示通知。我就在这里还是我错过了什么?
编辑:
感谢 CommonsWare 的评论,WorkManager
是正确的选择。
我自己写了 Worker
class 并试图在 MainActivity
的 onCreate
方法中加入 Work
队列:
if (firstRun) {
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresStorageNotLow(true)
.build();
PeriodicWorkRequest updateRequest = new PeriodicWorkRequest.Builder(NewPaperWorker.class, 30, TimeUnit.MINUTES)
.setConstraints(constraints)
.addTag("update")
.build();
// Enqueue the work
WorkManager
.getInstance(this.getApplicationContext())
.enqueue(updateRequest);
// After starting the work, the firstRun variable can be set to false
final SharedPreferences preferences = this.getSharedPreferences("PREFERENCE", MODE_PRIVATE);
preferences.edit()
.putBoolean("firstRun", false)
.apply();
}
Worker
显示通知,这是它唯一的工作。确实是第一次发通知,但之后,尽管有PeriodicWorkRequest
,但似乎完全停止了。根据开发人员指南,它应该大约每 30 分钟定期显示一次通知。我错过了什么?
我有一台小米红米Note 5,并为应用程序启用了自动启动。
WorkManager
是原题的解法,非常简单易用,谢谢CommonsWare!
经过测试,我也找到了第二个问题的解决方案。上面的代码绝对没问题,不需要修改一个字符。真正的问题是中文 phone,我必须关闭我的应用程序的电池限制才能使代码正常工作。
在小米红米 Note 5 上是
Battery & performance
-> Battery entry/Settings icon
-> App battery saver
-> 搜索应用 -> No restrictions
如果它不适合你,也许
Apps
-> Permissions
-> Autostart
-> Turn on
将解决此问题。
有关此的更多信息,请参见 and .
我的应用程序非常简单:它使用 Picasso 从静态 URL 下载 JPG,然后显示它。然而 URL 背后的图片会定期更新,而不会更改 URL 本身。发生这种情况时,应用程序必须显示有关它的通知,即使应用程序自启动以来尚未启动。
我的问题是:推荐的现代方法是什么?
我最大的问题是很多教程和文档包含 3 年以上的信息,这很令人困惑,但它对我来说是正确的,而且还没有过时。
目前我的概念是有一个 BroadcastReceiver
订阅了一个启动事件。这会启动带有 Intent
的 JobService
,并且 onStartJob
方法会显示通知。我就在这里还是我错过了什么?
编辑:
感谢 CommonsWare 的评论,WorkManager
是正确的选择。
我自己写了 Worker
class 并试图在 MainActivity
的 onCreate
方法中加入 Work
队列:
if (firstRun) {
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresStorageNotLow(true)
.build();
PeriodicWorkRequest updateRequest = new PeriodicWorkRequest.Builder(NewPaperWorker.class, 30, TimeUnit.MINUTES)
.setConstraints(constraints)
.addTag("update")
.build();
// Enqueue the work
WorkManager
.getInstance(this.getApplicationContext())
.enqueue(updateRequest);
// After starting the work, the firstRun variable can be set to false
final SharedPreferences preferences = this.getSharedPreferences("PREFERENCE", MODE_PRIVATE);
preferences.edit()
.putBoolean("firstRun", false)
.apply();
}
Worker
显示通知,这是它唯一的工作。确实是第一次发通知,但之后,尽管有PeriodicWorkRequest
,但似乎完全停止了。根据开发人员指南,它应该大约每 30 分钟定期显示一次通知。我错过了什么?
我有一台小米红米Note 5,并为应用程序启用了自动启动。
WorkManager
是原题的解法,非常简单易用,谢谢CommonsWare!
经过测试,我也找到了第二个问题的解决方案。上面的代码绝对没问题,不需要修改一个字符。真正的问题是中文 phone,我必须关闭我的应用程序的电池限制才能使代码正常工作。
在小米红米 Note 5 上是
Battery & performance
-> Battery entry/Settings icon
-> App battery saver
-> 搜索应用 -> No restrictions
如果它不适合你,也许
Apps
-> Permissions
-> Autostart
-> Turn on
将解决此问题。
有关此的更多信息,请参见