android - 应用程序被杀死时的后台操作?(Android API 23+)
问题描述
为了学习新知识,我正在开发一个 Android 应用程序(最低 SDK 版本 API 23 和目标 SDK 版本 API 28),它允许我和我的家人通过 HTTP 请求和 JSON 响应在免费 Web 上创建和共享虚拟购物清单。一切正常,但我想添加一个功能:即使应用程序被终止或从未启动,我也希望在有人进行更改时收到通知。我知道该任务可以做什么来比较列表中所做的更改,并且我也知道这是每 5 分钟执行一次的事情(例如),但我不知道如何在应用程序运行时执行后台操作不再运行,并且已从最近的任务列表中删除。我尝试了 Service 类,但是当应用程序被杀死时它停止了。所以我寻找了一个解决方案,我找到了 BroadcastReceiver 并使它能够在服务停止时接收消息以重新启动它。但是从 Android API 26 开始,BroadcastReceiver 必须(我猜..)上下文注册。
所以这就是我的主要活动在调用onCreate方法时所做的:
ReceiverCall receiver = new ReceiverCall();
registerReceiver(receiver, new IntentFilter("com.dadex.familyapp.startServiceRequest"));
我的ReceiverCall扩展了 BroadcastReceiver 类:
public class ReceiverCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try{
String action = intent.getAction();
if (action.equals("com.dadex.familyapp.startServiceRequest"))
context.startService(new Intent(context, CheckListService.class));
}
catch (Exception e){
Log.e("ERROR", e.getMessage());
}
}
}
这是我的 CheckListService onDestroy方法:
@Override
public void onDestroy() {
Intent intent = new Intent("com.dadex.familyapp.startServiceRequest");
sendBroadcast(intent);
}
启动应用程序时它工作正常,但是一旦我杀死它,接收器就不会收到任何东西。所以我的问题是:执行此类后台操作的最佳方式是什么?我还需要先学习其他课程吗?非常感谢!
解决方案
您需要一个后台服务,并带有通知以使其保持活动状态。
startForegorund()
搜索带有通知的 startForegorund,您将找到所需的内容。
推荐阅读
- sql-server - 从函数内的表中获取一个随机行 - sql server
- android - 从 Google Play 商店安装应用程序时的 onActivityResult 回调
- nginx - 如何使用 Goaccess 监控 nginx 错误日志?
- python - 非 utf8 列准备问题:在转换过程中发现未知类别 ['Fès-Meknès']
- mysql - 为什么依赖父表的普通实体不能命名为弱实体?
- machine-learning - Flux.jl:理解鸢尾花数据集下载源代码。为什么使用 SHA256 哈希?
- nunit - 在 NUnit 中调整测试名称
- python - 在 Python 中从 3D 数组创建 4D 数组
- android - 如何杀死由 NavHostFragment 创建的所有片段?
- java - 如何确定是否在十六进制字符串中设置了一个位?