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