Во -первых, я знаю, что нельзя действительно убивать/перезагрузить приложение на Android. В моем случае я хочу, чтобы на фабрику-резидентское приложение было в определенном случае, когда сервер отправляет кусок конкретной информации клиенту. Сервер с одним экземпляром приложения (то есть несколько устройств не допускаются). Если другой экземпляр получает этот «зарегистрированный»-лак, тогда все другие экземпляры этого пользователя должны удалить свои данные (заводской резит), чтобы поддерживать согласованность. Получите блокировку, потому что пользователь может удалить приложение и переустановить его, что приведет к другому идентификатору экземпляра, и пользователь больше не сможет освободить блокировку. Поэтому можно насильственно получить блокировку. Это делается (почти) каждый запрос на сервер. Сервер может отправить «неправильный идентификатор». Если это обнаружено, клиентское приложение должно все удалить. Иметь активность a, которая запускает активность входа в систему l или основную активность приложения b в зависимости от значения SharedPrefs. После запуска L или B он закрывается, так что работает только L или B. Таким образом, в случае, когда пользователь уже входит в систему B. Этот стек: < /p>
(a)> b> c> d < /p>
Из метода D onhandleintent d, событие отправляется в Resultreceiver R. /> После заводского ререста я хочу перезагрузить приложение (чтобы закрыть все действия) и только запустить снова, который затем запускает активность входа в систему l и заканчивается:
(a)> l < /p>
onclick-method диалога выглядит следующим образом: < /p>
Код: Выделить всё
@Override
public void onClick(DialogInterface dialog, int which) {
// Will call onCancelListener
MyApplication.factoryReset(); // (Deletes the database, clears sharedPrefs, etc.)
Intent i = new Intent(MyApp.getContext(), A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyApp.getContext().startActivity(i);
}
И это класс myApp :
Код: Выделить всё
public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
public static void factoryReset() {
// ...
}
}
Проблема заключается в том, что я использую FLAG_ACTICTION_NEW_TASK Действия B и C все еще работают. Если я нажимаю кнопку «Назад» на активность входа в систему я вижу C, но я хочу вернуться на главный экран. > Я получаю ошибку: < /p>
Код: Выделить всё
07-07 12:27:12.272: ERROR/AndroidRuntime(9512): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Я не могу использовать контекст действий , потому что ServiceIntent D также может быть вызван из фоновой задачи, которая начинается с помощью AlarmManager .
Итак, как я могу решить это для стекла деятельности стать (a)> l?
Подробнее здесь:
https://stackoverflow.com/questions/660 ... ndroid-app