Android应用保存log使用UncaughtExceptionHandler
UncaughtExceptionHandler,这个文件能够在应用发生异常的时候,把相应的log保存到你指定的文件中,
不需要看那logcat中长长的log,准确快速的定位到问题.至于这个文件怎么写,可以上午去查找.
使用它的时候,我遇到了下面的问题:
在应用程序出现异常的时候,程序不会退出,而是退到前面几个界面,原来保有的数据也因为
android.os.Process.killProcess(android.os.Process.myPid())
这个原因,数据都没有保存,但是现在退到的这个界面,需要之前的数据,所以现在还不如直接终止程序,
让用户再次点击程序开始.
基于这个问题,我想让程序出现问题后,保存日志,然后直接退出.
通过上网找资料,有如下方案可用:
- 用ActivityManager单列作为管理Activity,让每个界面入口都添加,然后在出现问题的时候,再把所有的界面通过它来关闭.它需要实现BaseActivity.java,然后每个界面来继承它,在抓取log后调用它
- 用Application单利来管理它,方法和上述的ActivityManager一样,可是这个就可以实现关闭应用的功能.
ActivitityManager.java
public class ActivityManager {
private ActivityManager() {
}
private Stack<Activity> mStack = new Stack<>();
private static class Holder {
private static ActivityManager mInstance = new ActivityManager();
}
public static ActivityManager getInstance() {
return Holder.mInstance;
}
public void addActivity(Activity activity) {
if (!mStack.contains(activity)) {
mStack.add(activity);
}
}
public void finishActivity(Activity activity) {
if (mStack.contains(activity)) {
mStack.remove(activity);
activity.finish();
}
}
public void finishActivity(Class<?> cls) {
for (Activity activity : mStack) {
if (activity.getClass().equals(cls)) {
mStack.remove(activity);
activity.finish();
}
}
}
public void finishAllActivitys() {
int size = mStack.size();
JftLogUtil.log("finishAllActivitys size = " + size);
for (Activity activity : mStack) {
mStack.remove(activity);
activity.finish();
}
// android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}
JftApplication.java
public class JftApplication extends Application {
private JunPayUtils mJunPayUtils;
private JunPayInfo mJunPayInfo;
private List<Activity> mActivities;
public JftApplication() {
super();
mActivities = new ArrayList<>();
mJunPayUtils = new JunPayUtils();
mJunPayInfo = new JunPayInfo();
}
private static class Holder {
static JftApplication mInstance = new JftApplication();
}
public static JftApplication getInstance() {
return Holder.mInstance;
}
@Override
public void onCreate() {
super.onCreate();
JFTExceptionHandler.getInstance().init(getApplicationContext());
}
public JunPayUtils getJunPayUtils() {
return mJunPayUtils;
}
public JunPayInfo getJunPayInfo() {
return mJunPayInfo;
}
public void addActivity(Activity activity) {
mActivities.add(activity);
}
public void exit() {
for (Activity activity : mActivities) {
activity.finish();
}
System.exit(0);
}
}
加油!以后多多加油!多多写博客!