首页 > 解决方案 > 当应用程序被杀死时 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();
    }

}

这是我的 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);
    }
}

标签: android-studioandroid-workmanager

解决方案


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


推荐阅读