Вызов методов из Android ViewModel в фоновом режиме - PullRequest
0 голосов
/ 01 июня 2018

У меня возникли некоторые проблемы при попытке реализовать компонент архитектуры 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, но я не уверен, правильно ли я их понимаю.

Спасибо!

...