尝试使用Async Task实现Android架构组件时遇到了一些问题。这是序列,我在屏幕A中选择一个按钮,它将执行异步任务A以显示带有按钮的对话框片段,然后我选择对话框片段中的按钮,它将执行异步任务B.在sasync任务B中doInBackground( ),我将从ViewModel调用restart()。
当点击屏幕A中的第一个按钮时:
upgradeTask = new UpgradeTask(this);
upgradeTask.execute((Void) null);
当对话框片段中的按钮onClick in async task A:
private final Context mContext;
public RunUpgradeTask(final Context context) {
mContext = context;
}
runUpgradeTask = new RunUpgradeTask(mContext);
runUpgradeTask.execute((Void) null);
在异步任务B中,我将在viewModel中执行一个方法:
RunUpgradeViewModel runUpgradeViewModel =
ViewModelProviders.of(mContext).get(RunUpgradeViewModel.class);
runUpgradeViewModel.restart();
然后,在我的viewModel中,我有这个方法:
public void restart(){
try {
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" });
proc.waitFor();
} catch (Exception ex) {
Log.i("REBOOT", "Could not reboot", ex);
}
}
然而,问题是,在我的异步任务B中,我在viewModel中调用了这个部分的方法:
ViewModelProviders.of(mContext)
它告诉我"无法解析android.content.Context" 错误消息,并在mContext变量中突出显示。 mContext变量是我从第一个屏幕A传递的上下文。任何想法如何解决这个问题?或者我正确地做到这一点,因为我花了几天时间试图了解Android架构组件,但我不确定我是否正确理解它们。
谢谢!