java - 它不调用的工人的构造函数?
问题描述
我尝试使用 Work Manager 实现计时器。
“计时器按钮被按下”出现在 logcat 中,但没有来自工人。我做错了什么?
这是我的 ViewModel 类:
public class MainViewModel extends ViewModel {
public static final String LOG_TAG = "MainActivity";
private final WorkManager workManager;
public MainViewModel(WorkManager workManager) {
this.workManager = workManager;
}
public void count() {
Log.d(LOG_TAG, "Timer button was hit!");
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(MainWorker.class).build();
workManager.beginUniqueWork("count-work", ExistingWorkPolicy.APPEND, request).enqueue();
}
}
这是我的工人。从这里开始,logcat 中没有出现任何内容。我不知道为什么。
public class MainWorker extends Worker {
public MainWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
Log.d(MainViewModel.LOG_TAG, "Created");
}
@NonNull
@Override
public Result doWork() {
Log.d(MainViewModel.LOG_TAG, "Work start");
return Result.success();
}
}
这是我的活动:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainViewModel viewModel = new MainViewModel(WorkManager.getInstance(this));
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setMainViewModel(viewModel);
}
}
解决方案
ViewModel 没有按照您的方式进行初始化。如果您必须将某些内容传递给 ViewModel 构造函数,您可能应该考虑使用ViewModelProvider.Factory()
.
您可以制作自己的 ViewModelProvider.Factory()
推荐阅读
- r - R中的茎叶图错误'|' 位置
- windows-installer - msi 安装程序客户信息表单验证许可证
- vim - 我可以使用 ale 或 syntastic 作为 pre-write 钩子而不是 post-write 吗?
- iis - 如何使用 https 加密或隐藏 Chrome 开发者工具或 IE 中的响应数据?
- service-worker - 在 PWA 中,有没有办法检查等待的服务人员升级?
- kubernetes - 可以在 containerPort 上使用 valueFrom
- mysql - 如何从 MYSQL 中的 Varchar 字段中选择最大数值
- azure-data-factory - 在 ADFv2 中获取一个月的天数
- networking - 通过 VPN 从 GKE Pod 传出的流量
- android - 在 Android 上启动屏幕后,Unity 构建在灰屏上冻结