非常に短く単純なLVLコールバック関数では、次のようになります。
public void applicationError(ApplicationErrorCode errorCode) {
Log.v(getMethodName(2), "TID: " + android.os.Process.myTid());
Log.v("applicationError()", "TID: " + android.os.Process.myTid());
if (!isFinishing()) { // Don't update UI if Activity is finishing.
String result = String.format(getString(R.string.application_error), errorCode);
displayResult(result);
}
このコールバックはのメソッドメンバーです
private class MyLicenseCheckerCallback implements LicenseCheckerCallback
およびアプリケーションのアクティビティメソッドとして定義されたgetMethodName():
public static String getMethodName(final int depth)
{
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
String retStr = ste[depth+1].getClassName() + "." + ste[depth+1].getMethodName();
if (retStr == null)
retStr = "This is weird.";
else if (retStr.length() < 1)
retStr = "This is even weirder.";
return retStr;
}
さて、奇妙な部分:
LogCatは常に2番目を表示しますLog.v()
が、1番目を表示することLog.v()
はありません。
最初は、おそらくretStrはnullか空のどちらかだと思いましたが、ログには明らかにそのようなものは表示されません。
他のメソッドでは、すべてを呼び出すとLog.v(getMethodName(2), "TID: " + android.os.Process.myTid());
正常に機能します。
この奇妙で一貫性のないLog.v()
振る舞いを説明できるのは何でしょうか。
更新: CheGuaVerraの回答の最初の部分を実装しました。これは、取得した興味深いログです。
06-16 01:02:57.080: INFO/First(835): Log.v
06-16 01:02:57.080: INFO/First(835): [ 06-16 01:02:57.080 835:0x34b V/com.example.baseapp.googlepaid.MyActivityGooglePaid$MyLicenseCheckerCallback.applTID: 843
06-16 01:02:57.080: INFO/Second(835): Log.v
06-16 01:02:57.080: VERBOSE/applicationError()(835): TID: 843
更新2: CheGuaVerraの回答に両方の部分を実装しました。これは、取得した興味深いログです。
06-16 10:13:22.588: INFO/First(1122): Log.v
06-16 10:13:22.588: INFO/getMethodName(1122): Start
06-16 10:13:22.588: INFO/getMethodName(1122): [ 06-16 10:13:22.588 1122:0x46a V/com.example.baseapp.googlepaid.MyActivityGooglePaid$MyLicenseCheckerCallback.applTID: 1130
06-16 10:13:22.588: INFO/Second(1122): Log.v
06-16 10:13:22.588: VERBOSE/applicationError()(1122): TID: 1130
Thread.currentThread().getStackTrace()[depth+1].getMethodName()
UIスレッドから呼び出されるのが単に「好き」ではない可能性はありますか?
また、のLog.v()
ような奇妙な文字列は好きではないよう[ 06-16 10:13:22.588 1122:0x46a V/com.example.baseapp.googlepaid.MyActivityGooglePaid$MyLicenseCheckerCallback.appl
です。