0

我已经编写了在后台检查每分钟条件的应用程序,如果它是真的,那么它将发送通知/振动。

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

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

(手机屏幕锁定时)

  • 分钟 1: 发送通知
  • 分钟 2: 发送通知
  • 分钟 3: 没有
  • 4分钟:没有
  • ……

(打开屏幕)

出现大量通知,例如任务在锁定时运行,但仅在解锁屏幕时显示

谁可以帮我这个事?我正在使用 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();
    }
4

1 回答 1

1

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

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

于 2022-01-13T20:28:03.827 回答