Я нашел это Android: как автоматически перезапустить приложение после того, как оно было принудительно закрыто "?
но я не знаю, где и как поставить диспетчер аварийных сообщений
спасибо
Я нашел это Android: как автоматически перезапустить приложение после того, как оно было принудительно закрыто "?
но я не знаю, где и как поставить диспетчер аварийных сообщений
спасибо
Вы можете поймать все неперехваченные исключения в своем классе расширения приложения. В обработчике исключений сделайте что-нибудь об исключении и попробуйте настроить 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);
    }
}
В принципе, вы должны реализовать свой собственный экземпляр UncaughtExceptionHandler, тогда вам нужно будет убедиться, что для каждого потока Приложение запускает вызов setUncaughtExceptionHandler.
Затем, когда в любом из этих потоков возникает неперехваченное исключение, вызывается ваш собственный UncaughtExceptionHandler, и вы можете оттуда планировать перезапуск приложения или что-то еще до передачи исключения.
Я не знаю, действительно ли имеет смысл просто перезапустить приложение в этом случае. Пользователь может быть довольно "удивлен", если в середине своего взаимодействия приложение "сбрасывается" и не возобновляется там, где было всего лишь секунду назад, возможно даже потеряв предыдущий ввод пользователя и т.д.
Edit:
См. здесь, ответ Гьюри. Помимо этого вам нужно только реализовать интерфейс, а именно UncaughtExceptionHandler и "вставить" код Gyuri.
Изменить # 2:
Для справки: служба, запущенная "sticky" , может также достичь желаемого результата.
Вы можете обработать неперехваченные исключения с помощью библиотеки FireCrasher, выполнить восстановление из нее и отправить отзыв пользователя в виде диалога или сообщения.
Вы можете узнать больше о библиотеке в этой средней статье