首页 > 解决方案 > 应用程序被杀死时的后台操作?(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);
}

启动应用程序时它工作正常,但是一旦我杀死它,接收器就不会收到任何东西。所以我的问题是:执行此类后台操作的最佳方式是什么?我还需要先学习其他课程吗?非常感谢!

标签: androidbroadcastreceiverandroid-servicebackground-process

解决方案


您需要一个后台服务,并带有通知以使其保持活动状态。

startForegorund()

搜索带有通知的 startForegorund,您将找到所需的内容。


推荐阅读