我已经看过了android.util.Log的文件,我不知道之间究竟有什么区别Log.e()
和Log.wtf()
是.一个比另一个更受欢迎吗?有功能差异吗?当然,他们并不多余.
未来读者请注意:在提出这个问题的时候,这方面的文件不太清楚.如果您按照上面的链接,他们已经解决了问题.
Joa*_*son 93
严重程度不同;
Log.e()
只会将错误记录到优先级为ERROR的日志中.
Log.wtf()
将以优先级ASSERT记录错误,并可能(取决于系统配置)发送错误报告并立即终止程序.
小智 6
Log.e()
只是简单地将日志记录到日志中,优先级为ERROR.
Log.wtf()
(多么可怕的失败)比错误日志更严重.永远不会发生的错误.在终止程序之前,它可能会强制设备保留以写入日志.
官方文档说:
Log.e()
具有优先级错误的日志。但是,Log.wtf()
日志优先级为ASSERT。
ASSERT 具有优先级常量 = 7
ERROR 具有优先级常量 = 6
因此Log.wtf()
具有更高的优先级Log.e()
然而,源代码 与上述信息冲突。
static int wtf(int logId, String tag, String msg, Throwable tr,boolean localStack, boolean system) {
TerribleFailure what = new TerribleFailure(msg, tr);
// Only mark this as ERROR, do not use ASSERT since that should be
// reserved for cases where the system is guaranteed to abort.
// The onTerribleFailure call does not always cause a crash.
int bytes = printlns(logId, ERROR, tag, msg, localStack ? what : tr);
...
}
Run Code Online (Sandbox Code Playgroud)
官方文档中似乎有错误。因为两者Log.wtf()
和Log.e()
日志都具有优先级错误。
Log.e() 的源代码:
public static int e(@Nullable String tag, @Nullable String msg,@Nullable Throwable tr) {
return printlns(LOG_ID_MAIN, ERROR, tag, msg, tr);
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于 Log.wtf() 可能会调用 onTerribleFailure() 回调。
onTerribleFailure() 可能会也可能不会导致进程终止(取决于系统设置)。
TL; 博士
Log.wtf() 可能会调用 onTerribleFailure() 并可能导致应用程序终止。
实际上,这可能是 Android SDK 中的文档错误,真是令人惊讶......文档说:
错误将始终通过调用堆栈记录在 ASSERT 级别。
但源代码是这样说的:
static int wtf(int logId, String tag, String msg, Throwable tr, boolean localStack, boolean system) {
...
int bytes = printlns(logId, ERROR, tag, msg, localStack ? what : tr);
...
}
Run Code Online (Sandbox Code Playgroud)
因此,Log.wtf() 和 Log.e() 都具有相同的优先级,ERROR。
不同之处在于 Log.wtf() 调用 onTerribleFailure() 回调,该回调“报告当前进程中的严重错误。可能会也可能不会导致进程终止(取决于系统设置)”。
因此,换句话说,Log.wtf() 可能会使您的应用程序崩溃。
下面是一个代码片段:
if (ActivityManager.getService().handleApplicationWtf(
mApplicationObject, tag, system,
new ApplicationErrorReport.ParcelableCrashInfo(t))) {
// The Activity Manager has already written us off -- now exit.
Process.killProcess(Process.myPid());
System.exit(10);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31683 次 |
最近记录: |