应用程序被杀死时的后台操作? (Android API 23以上)

时间:2019-01-25 15:25:51

标签: android broadcastreceiver android-service background-process

要学习新知识,我正在开发一个Android APP(最低SDK版本API 23和Target SDK版本API 28),该应用程序使我和家人可以通过HTTP请求和JSON响应创建和共享虚拟购物清单。免费网络。一切正常,但我想添加一个功能:当某人进行更改时,即使该应用被终止或从未启动,我也希望得到通知。我知道该任务可以用来比较列表上所做的更改,并且还知道每5分钟要执行一次操作(例如),但是我不知道当应用程序处于运行状态时如何执行后台操作不再运行,并且已从近期任务列表中删除。我尝试了Service类,但是当应用被终止时,它停止了。因此,我寻找解决方案,找到了BroadcastReceiver,并使其能够在服务停止时接收消息以重新启动它。但是从Android API 26开始,BroadcastReceiver必须是contex注册的。

因此,当调用 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);
}

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

1 个答案:

答案 0 :(得分:0)

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

startForegorund()

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