【问题标题】:WorkManager not working when the App is killed当应用程序被杀死时 WorkManager 不工作
【发布时间】:2019-12-24 20:06:18
【问题描述】:

我正在创建一个测试应用程序,它每 5 秒递增一次存储在数据库中的值,无论应用程序是否正在运行。因此,因此我选择了 PeriodicWork Request 但增量仅在应用程序运行时发生,而不是在应用程序被终止或未运行时发生。

这是我的 Worker 类代码

public class MuWorker extends Worker {
    public int inValue;
    DatabaseAccess databaseAccess;

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

    @NonNull
    @Override
    public Result doWork() {

        databaseAccess = DatabaseAccess.getInstance(getApplicationContext());
        databaseAccess.open();
        inValue = databaseAccess.readValue();
        databaseAccess.close();

        inValue=inValue+1;
        databaseAccess=DatabaseAccess.getInstance(getApplicationContext());
        databaseAccess.open();
        databaseAccess.updateValue(inValue);
        databaseAccess.close();

        return Result.success();
    }

}

这是我的 Mainactivity 代码

public class MainActivity extends AppCompatActivity {

    TextView t1;
    DatabaseAccess databaseAccess;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WorkManager mWorkManager = WorkManager.getInstance();

        final PeriodicWorkRequest periodicWorkRequest
                = new PeriodicWorkRequest.Builder(MuWorker.class, 4, TimeUnit.SECONDS)
                .build();

        int value = 0;

        databaseAccess = DatabaseAccess.getInstance(getApplicationContext());
        databaseAccess.open();
        value = databaseAccess.readValue();
        databaseAccess.close();

        t1 = findViewById(R.id.text);
        t1.setText("" + value);

        mWorkManager.enqueue(periodicWorkRequest);
    }
}

【问题讨论】:

  • PeriodicWorkRequest 的最小间隔为 15 分钟。这是由 WorkManager 在 API 23+ 上使用的 JobScheduler API 规定的。如果您想每 5 秒执行一次操作,最好使用前台服务处理代码中的时间段。
  • @pfmaggi 谢谢解决它。

标签: android-studio android-workmanager


【解决方案1】:

也请看看这个post。 在这些品牌中,由于操作系统中的大量定制,默认情况下,当应用程序被杀死时,所有前台服务和工作管理器都不会工作。 我遇到了同样的问题,经过大量研究,终于找到了解决方案。 您必须启用自动启动,您的应用程序才能在它被杀死时执行。 因此,您必须提示用户启用该设置。 在帖子中,您必须在每个品牌中触发具有适当操作的 Intent。

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多