android - 在android java中发生异常后如何记录用户活动一段时间?
问题描述
我正在尝试记录异常以及用户导航 x 时间。例如,当我的应用程序出现异常时,我会将其附加到文本文件中。现在从那个时间点开始,我只需要记录一段时间。例如,1 小时。有可能做到吗?这是我为获取异常信息并将其记录在文件中而编写的代码。请有人帮我解决这个问题。提前致谢。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(handleAppCrash);
}
private Thread.UncaughtExceptionHandler handleAppCrash =
new Thread.UncaughtExceptionHandler() {
@SuppressLint("LongLogTag")
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!file.exists()) {
file.mkdir();
}
try {
data = android_version + "@" + Device + "@" + username + "@" + version + "@" + dates + "@" + Logtrace;
File gpxfile = new File(file, fname);
FileWriter writer = new FileWriter(gpxfile,true);
writer.append(data);
writer.flush();
writer.close();
} catch (
Exception e) {
e.printStackTrace();
}
}
};
解决方案
你正在寻找一种方法
- 重启应用
- 将更多日志写入您在
UncaughtExceptionHandler
.
首先,要重新启动应用程序,您可以执行以下步骤:
创建了一个待处理的意图,例如,在您的 onCreate 中(其中
Intent intent
有类范围,已经定义,即,不只是在 onCreate 中定义):intent = PendingIntent.getActivity( YourApplication.getInstance().getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags());
在你的 try/catch 之后
UncaughtExceptionHandler
,启动警报以在一段时间内触发你的应用程序,例如 1 秒;并且您必须使用System.exit();
. 这样当前正在死去的应用程序将正确退出,以便在 1 秒内,当警报触发时,它将再次启动应用程序(但如果应用程序仍在运行,则不会)。AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, intent); System.exit(2);
您可以选择将文件的名称(
fname
在您的代码中)存储到 SharedPreferences(用于在应用程序重新启动时写入同一文件)。或者它可能是您的应用程序知道的固定硬编码名称,并且不需要保存该名称。您可以在 SharedPreferences 中保存一个布尔值,让您的应用知道您正在从未捕获的异常重新启动。
其次,每当应用程序启动时:
检查 SharedPreferences 中的布尔值;如果是正常开始,则照常进行。
如果是在未捕获异常后重新启动,则从 SharedPreferences 检索文件名(或对其进行硬编码),然后您可以将更多日志写入文件。与在 Android 中一样,文件由路径和文件名唯一确定。使用相同的文件名,您可以打开相同的文件。
推荐阅读
- spring-boot - Spring @Transactional 在 CompletionHandler 回调方法中不起作用
- javascript - 用于切换“显示您的位置”的 Javascript 传单地图
- oracle - DBMS_METADATA.PUT(CLOB) 上的 ORA-31607: 调用了 (1) FETCH_XML
- powershell - 我想做一个以计算机名作为参数的脚本
- python - 根据最近十次迭代的改进来衡量,迭代没有取得良好的进展。制作 SRK EoS/Python 时出错
- python - 使用Python通过PNG格式的Google Earth坐标提取图像
- android - 如何转换视频并以合理的处理时间导出新文件
- scala - 使用 Python/Scala 的 Databricks 雪花表
- keycloak - Keycloak 自定义 UserStorageProvider:用户对此更新是只读的
- python - Python直方图箱问题-箱与我的数组不匹配