应用程序被杀死时,WorkManager无法正常工作

时间:2019-12-24 20:06:18

标签: android-studio android-workmanager

我正在创建一个测试应用程序,该应用程序每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();
    }

}

这是我的主要活动代码

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);
    }
}

1 个答案:

答案 0 :(得分:0)

也请看看此post。 在这些品牌中,由于操作系统中的大量自定义设置,默认情况下,当应用程序被终止时,所有前台服务和工作管理器均无法正常工作。 我遇到了同样的问题,经过大量研究,终于找到了解决方案。 您必须启用自动启动,才能使应用程序在被终止时能够执行。 因此,您必须提示用户启用设置。 在帖子中,您必须在每个品牌中激发必要的意图并采取适当的措施。