Java 获取正在执行的当前方法的名称
我基本上是在做一个有很多活动的应用程序。我有几个朋友使用安卓手机,我给了他们这个应用进行测试。然而,它有时会进入无休止的循环,并产生奇怪的行为,我无法理解这些行为,因为它们缺乏编程经验,无法在这些特定时刻转储logcat 所以我需要做的是创建一个静态的始终可见的窗口,可能是弹出窗口,显示程序现在使用的方法 所以我的问题是,哪种方法是实现此功能的最佳方法,以及如何检索应用程序所在的当前方法(它有多个线程) 您可以尝试以下方法:Java 获取正在执行的当前方法的名称,java,android,thread-safety,Java,Android,Thread Safety,我基本上是在做一个有很多活动的应用程序。我有几个朋友使用安卓手机,我给了他们这个应用进行测试。然而,它有时会进入无休止的循环,并产生奇怪的行为,我无法理解这些行为,因为它们缺乏编程经验,无法在这些特定时刻转储logcat 所以我需要做的是创建一个静态的始终可见的窗口,可能是弹出窗口,显示程序现在使用的方法 所以我的问题是,哪种方法是实现此功能的最佳方法,以及如何检索应用程序所在的当前方法(它有多个线程) 您可以尝试以下方法: public String getCurrentMethod(){
public String getCurrentMethod(){
try{
throw new Exception("");
}catch(Exception e){
return e.getStackTrace()[0].toString();
}
return ""; // This never happens
}
它将返回如下内容:ClassName.methodName():123
如果您这样搜索,会有很多答案。这是一个简单的方法
String name = new Object(){}.getClass().getEnclosingMethod().getName();
你应该参考这篇文章。
在我的设备上,它是-
Thread.currentThread().getStackTrace()[2].getMethodName()
(不是[1]而是[2])请澄清您的问题。Android可以进行线程转储吗?这可能是一个非常有用的调试工具。注意:您不需要抛出
异常
来获取它的stacktrace:new Exception()。getStackTrace()[0]
应该可以正常工作。当然。这就是我在不编译的情况下编码得到的结果:)请注意,每次使用都会创建一个新的匿名类定义。请检查其他问题和我的答案stackoverflow.com/a/8592871/658826-无论索引是什么,这个问题都会为您提供正确的方法名称。
Thread.currentThread().getStackTrace()[1].getMethodName()