この記事では、主にStackTraceElementの関連するコンテンツを研究して、詳細な紹介と例を次のように取得するためのメソッドコールスタック情報を取得します。
Stacktrace(Stack Track)は、メソッドコールスタックに情報を保存します。例外処理で一般的に使用されるprintstacktrace()は、本質的に例外呼び出しのスタック情報を印刷することです。
StackTraceElementは、Stacktrace(Stack Track)のメソッドオブジェクトを表し、そのプロパティにはメソッドのクラス名、メソッド名、ファイル名、および呼び出された行の数が含まれます。
Public Final Class StackTraceElementはjava.io.serializable {//通常VMによって初期化された(1.5に追加されたパブリックコンストラクター)プライベートストリングdecrareclass; private string methodname; private string filename; private int linenumber;}StackTraceElementは最終として定義されており、Java Basicクラスとして継承することは許可されていないことを示しています。
StackTraceElementを取得するには2つの方法がありますが、どちらもこのスタックの情報であるStackTraceElementアレイを返します。
1。thread.currentthread()。getStackTrace()
2。new Throwable()。getStackTrace()
StackTraceElementアレイには、Stacktrace(Stack Track)のコンテンツが含まれています。それを通過することにより、メソッド間で呼び出しプロセスを取得できます。つまり、現在のメソッドとその発信者のメソッド名、コールライン数、その他の情報を取得できます。
public class testclass {public static void main(string [] args){new testclass()。methoda();} private void methoda(){system.out.println( "---------------------------------"); methodb();} private void methodB(){System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {stacktraceElement stacktraceElement = elements [i]; string classname = stacktraceElement.getClassName(); string methodname = stacktraceelement.getMethodName(); stackTraceElement.getFileName(); int linEnumber = intlaselement.getlinement.getlinemenement.getlineNemenmenmer subscript i = "+i+"、filename = "+filename+"、className = "+className+"、methodname = "+methodname+"、linenumber = "+lineNumber);}}}}1.ログライブラリをカプセル化できます。ターゲットログを印刷するときは、このコールスタックを介してログが配置されている行の数を印刷することもできます。このようにして、ログ出力ラインをすばやく見つけることができ、グローバルに検索して検索できなくなります。
public static void d(string tag、string msg、object ... params){stacktraceElement targetSctackTraceElement = getTargetStackTraceElement(); log.d(tag、 "(" + targetStackTraceElement.getFileName() + ":" + targetStackTraceElement.getLineNumber() + ")"); log.d(tag、string.format(msg、params));}2. SDKを記述し、特定の方法が固定位置で呼び出されることを願っている場合、このメソッドが呼び出されるときにこのメソッドの呼び出し位置が正しいかどうかを確認することもできます。
たとえば、Activity.Onresume、pvsdk.onresumeで実行する必要があるため、pvsdk.onresumeメソッドを呼び出すと、pvsdk.onresumeメソッドを使用して、このメソッドが通話スタックの情報を取得してアクティビティOnresumeメソッドで呼び出されるかどうかを検出します。
public class pvsdk {public static void onresume(){stacktraceElement [] stacktrace = thread.currentthread()。getStacktrace(); boolean result = false; stacktraceElement.getClassName(); try {boolean assignablefromclass = class.forname(classname).isassignablefrom(Activity.class); if(assiadablefromclass && "onresume"。 runtimeexception( "pvsdk.onresumeはactivity.onresume");}}3.ソースコード分析を実施している場合、コード全体の実行プロセスを分析する場合は、印刷スタックから情報を取得できます。これは、ソースコードを分析するときに非常に便利です。
上記は、StacktraceElementメソッドコールスタック情報の例に関するこの記事のすべての詳細な説明です。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!