Android 应用程序代码在 phone 屏幕锁定时停止

Android Application code stop when phone screen is locked

我编写了应用程序,在后台检查每分钟的条件,如果为真,它将发送 notification/vibrate。

它工作正常,但只有当我的 phone 处于活动状态时(意味着屏幕未锁定)。

我尝试了很多解决方案,例如使用服务、JobSchedule、WorkManager(当前),但它们似乎都不起作用。 WorkManager 代码的行为是这样的:

(phone屏幕锁定时)

(点亮屏幕)

出现群发通知,如任务运行锁定时,解锁后才显示

谁能帮我解决这个问题?我正在使用 OnePlus 9 Pro 进行测试

代码片段

public class MyService extends Worker {
    Timer myTimer;
    TimerTask doThis;
    private DBHelper mydb;

    public MyService(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

   @Override
    public Result doWork() {
        StrictMode.setThreadPolicy(new Builder().permitAll().build());
        mydb = new DBHelper(getApplicationContext());
        // Let it continue running until it is stopped.
        myTimer = new Timer();
        int delay = 0;   // delay for 0 sec.
        int period = 1000*60;  // repeat every 60 sec.
        doThis = new TimerTask() {
            public void run() {
             //Some task
             if (true) {
                                    notify("aaaa");
                                    Log.e("OK", "Match!");
                        }

                    ...

        myTimer.schedule(doThis, delay, period);
        return Result.success();
    }

您的应用程序的问题不在于流程,而在于 android 系统本身。

您需要实施一种叫做打瞌睡模式的东西。这样当 phone 被锁定时进程/应用程序不会被终止 Google Docs On Doze Mode 您需要实现一个名为 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.

的权限