Я нашел Android: How to auto-restart application after it's been "force closed"?как реализовать uncaughtException андроид
, но я не знаю, где и как поставить менеджера сигнализации
благодаря
Я нашел Android: How to auto-restart application after it's been "force closed"?как реализовать uncaughtException андроид
, но я не знаю, где и как поставить менеджера сигнализации
благодаря
Вы можете поймать все неперехваченные исключения в своем классе расширения приложения. В обработчике исключений сделайте что-нибудь об исключении и попробуйте настроить AlarmManager для перезапуска приложения. Вот пример, как я это делаю в своем приложении, но я только регистрирую исключение в db.
public class MyApplication extends Application {
// uncaught exception handler variable
private UncaughtExceptionHandler defaultUEH;
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler =
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// here I do logging of exception to a db
PendingIntent myActivity = PendingIntent.getActivity(getContext(),
192837, new Intent(getContext(), MyActivity.class),
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager;
alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
15000, myActivity);
System.exit(2);
// re-throw critical exception further to the os (important)
defaultUEH.uncaughtException(thread, ex);
}
};
public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
// setup handler for uncaught exception
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
}
Я положил диспетчер аварийных сообщений в @override, но мое приложение не перезагрузилось, когда я закончил процесс через диспетчер задач:/ –
Я сомневаюсь, что когда процесс * убит *, будет выбрано исключение - или любой другой исполняемый Java-код, если на то пошло. – JimmyB
Я делясь на 0, чтобы вызвать исключение. Поймайте его в моем обработчике, после чего я могу перезапустить приложение. Если вы убьете процесс, я соглашаюсь с @HannoBinder, исключение не будет выбрано, иначе, когда у телефона заканчивается память, и ОС начинает убивать процессы, мы получим множество исключений. – Maxim
В принципе, вы должны реализовать свой собственный экземпляр UncaughtExceptionHandler, то вам нужно будет убедиться, что для каждой темы, в которой работает приложение, вы звоните setUncaughtExceptionHandler.
Затем, когда возникает неперехваченное исключение в любом из этих потоков, вызывается ваш собственный UncaughtExceptionHandler
, и вы можете оттуда планировать перезагрузку своего приложения или что-то еще перед передачей исключения.
Я не знаю, действительно ли имеет смысл просто перезапустить приложение в этом случае. Пользователь может быть довольно «удивлен», если в середине своего взаимодействия приложение «сбрасывается» и не возобновляется там, где было всего лишь секунду назад, возможно, даже потеряв предыдущий ввод пользователя и т. Д.
Редактировать:
См. here, ответ Гьюри. Помимо этого вам нужно только реализовать интерфейс, а именно UncaughtExceptionHandler
и вставить код Gyuri в это.
Edit # 2:
Для справки: служба начала "sticky" может достичь желаемого результата, тоже.
Да, я знаю, что мне нужно его реализовать, но я не знаю Не знаете, как ... вы могли бы разместить образец кода, пожалуйста? –
Минута интернет-поиска могла бы указать вам, например, [это] (http://www.java2s.com/Code/JavaAPI/java.lang/implementsUncaughtExceptionHandler.htm). – JimmyB
Вы не можете использовать getSystemService в статическом классе => alarmanager –
Что вы имеете в виду, вы не знаете, где поставить диспетчер аварийных сигналов? –
Мне нужно перезагрузить приложение, когда оно принудительно закрыто либо по ошибке, либо, например, путем завершения процесса с помощью диспетчера задач, ссылка, которую я нашел, выглядела очень хорошо, но я не знаю, как реализовать ошибку обхода ошибки, когда вам нужно поместите диспетчер аварийных сигналов –
Почему вы не используете учетную запись Try and Catch, где произошла ошибка –