Auto Restart application after Crash/Force Close in Android
来源:互联网 发布:青山计价软件 编辑:程序博客网 时间:2024/04/29 07:04
In an Android application, we usually got the “Force Closed” error if we didn’t get the exceptions right. Everyone has question about “How can I restart my application automatically if it force closed?”.
In this tutorial, we will learn how to handle exception manually and how to restart/auto launch your application after crash/force close.
To get Answer of your question is very simple. In that case you need to use Thread.setDefaultUncaughtExceptionHandler()
. It will always enter in uncaughtException() in case your application crashed.
In order to restart your application when it crashed you should do the following thing.
Step 1
Create an Intent
of your activity which you want to relaunch.
Intent intent = new Intent(activity, RelaunchActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK);
In this step, we take Intent
to store which activity to launch with some flags.
Here,
Intent.FLAG_ACTIVITY_CLEAR_TOP
is used because
If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.
Intent.FLAG_ACTIVITY_CLEAR_TASK
is used because
Flag will cause any existing task that would be associated with the activity to be cleared before the activity is started.
Intent.FLAG_ACTIVITY_NEW_TASK
is used because
If set, this activity will become the start of a new task on this history stack. A task (from the activity that started it to the next task activity) defines an atomic group of activities that the user can move to.
Step 2
Inside your uncaughtException()
method, write following code.
PendingIntent pendingIntent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0, intent, intent.getFlags());AlarmManager mgr = (AlarmManager) YourApplication.getInstance().getBaseContext().getSystemService(Context.ALARM_SERVICE);mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, pendingIntent);activity.finish();System.exit(2);
Didn’t get?
Here, PendingIntent
is used. It is different then simple Intent
. It stores request code and intent with its flags.
Read more about Intent flags.
AlarmManager
is used to set an alarm to perform a task after 2 seconds. What we will do here is, we will start our application after 2 seconds. So we will set a timer to execute after 2 seconds and pass PendingIntent
to it.
After that, we have to finish our current activity from where we got an exception. This is necessary step, also we need to exit from our application.
Full source code
YourApplication.java
import android.app.Application;/** * This custom class is used to Application level things. * * @author Chintan Rathod (http://www.chintanrathod.com) */public class YourApplication extends Application {private static Context mContext;public static YourApplication instace;@Overridepublic void onCreate() {super.onCreate();mContext = getApplicationContext(); instace = this;}@Overridepublic Context getApplicationContext() {return super.getApplicationContext();}public static YourApplication getIntance() {return instace;}}
DefaultExceptionHandler.java
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.lang.Thread.UncaughtExceptionHandler;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.os.Environment;import android.util.Log;/** * This custom class is used to handle exception. * * @author Chintan Rathod (http://www.chintanrathod.com) */public class DefaultExceptionHandler implements UncaughtExceptionHandler {private UncaughtExceptionHandler defaultUEH;Activity activity;public DefaultExceptionHandler(Activity activity) {this.activity = activity;}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {try {Intent intent = new Intent(activity, RelaunchActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK);PendingIntent pendingIntent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0, intent, intent.getFlags()); //Following code will restart your application after 2 secondsAlarmManager mgr = (AlarmManager) YourApplication.getInstance().getBaseContext().getSystemService(Context.ALARM_SERVICE);mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,pendingIntent); //This will finish your activity manuallyactivity.finish(); //This will stop your application and take out from it.System.exit(2);} catch (IOException e) {e.printStackTrace();}}}
In this code YourApplication
is an application class. To know more about it, please read Usage of Application class in Android
To use this class in your application, use following code inside onCreate()
method of activity.
Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(this));
Summary
In this tutorial, we learnt how to use UncaughtExceptionHandler
in android application to handle exception manually. We also learnt how to restart application after crash or force close in Android.
- Auto Restart application after Crash/Force Close in Android
- Auto Restart application after Crash/Force Close in Android
- 【Android】App应用崩溃(Crash/Force Close)之后如何让它自动重启?
- How to close (auto hide) WPF window after 10 sec using a timer in C#?
- Force close
- Android开发的ANR和Force Close
- Android Force close是什么引起的?
- How to close Android application?
- How to force a panic/crash in Linux?
- Auto Memory Dump on Crash of an Application
- Android Tab Layout (TabHost) Tutorial的Force Close错误
- android开发调测问题_app启动直接Force Close。
- 关于Android Force Close 出现的原因 以及解决方法
- 关于Android Force Close 出现的原因 以及解决方法
- 关于Android Force Close 出现的原因 以及解决方法
- 关于Android FC(Force Close)出现问题解决
- Android Force Close和ANR等异常处理方法
- 关于Android Force Close 出现的原因 以及解决方法
- 责任链模式
- 入门JNI需要知道的(二)
- java基础学习之文件读写
- 欢迎使用CSDN-markdown编辑器
- zookeeper安装配置
- Auto Restart application after Crash/Force Close in Android
- Lua初识(2)_运算符
- Java中return的用法
- dbutils(初学者自学经历)
- spring+spring mvc+mybatis+shiro+maven+bootstrap+ajax+json+分页
- u-boot-2016.05移植:(4)、支持NADN FLASH
- github学习(1)--初始化
- BUG:The specified child already has a parent. You must call removeView() on the child's parent first
- struts2入门简介