У меня возникли некоторые проблемы при попытке реализовать компонент архитектуры Android с помощью Async Task.Вот последовательность: я выбираю кнопку на экране A, она выполняет асинхронную задачу A для отображения фрагмента диалога с помощью кнопки, затем я выбираю кнопку во фрагменте диалога, она выполняет асинхронную задачу B. В задаче sasync B doInBackground (), Я буду вызывать restart () из ViewModel.
Когда самая первая кнопка onClick на экране A:
upgradeTask = new UpgradeTask(this);
upgradeTask.execute((Void) null);
Когда кнопка в фрагменте диалога onClick в асинхронной задаче 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, но я не уверен, правильно ли я их понимаю.
Спасибо!