【问题标题】:Get the name of the current method being executed [duplicate]获取当前正在执行的方法的名称[重复]
【发布时间】:2023-03-10 13:17:01
【问题描述】:

嗯,我基本上在做的是一个有很多活动的应用程序。我有几个朋友使用安卓手机,我给了他们应用程序进行测试。但是,它有时会进入无休止的循环并执行我无法理解的奇怪行为,因为他们缺乏编程经验并且无法在那些特定时刻转储 logcat。

所以我需要做的是创建一个静态的始终可见的窗口,可能是弹出窗口,它显示程序现在采用哪种方法。

所以我的问题是,这是实现此功能的最佳方式以及如何检索应用程序所在的当前方法(它有多个线程)。

【问题讨论】:

  • 请澄清您的问题。
  • Android 可以做线程转储吗?这可能会成为一个非常有用的调试工具。

标签: java android thread-safety


【解决方案1】:

在我的设备上是 - Thread.currentThread().getStackTrace()[2].getMethodName()

(不是 [1] 而是 [2])

【讨论】:

  • 检查其他问题和我的答案 stackoverflow.com/a/8592871/658826 - 无论索引是什么,这一个都会为您提供正确的方法名称。
【解决方案2】:
Thread.currentThread().getStackTrace()[1].getMethodName()

【讨论】:

    【解决方案3】:

    如果您搜索 SO,则有很多答案。这是一个简单的方法

    String name = new Object(){}.getClass().getEnclosingMethod().getName();
    

    你应该参考这篇文章。 Getting the name of the current executing method

    【讨论】:

    • 请注意,每次使用都会创建一个新的匿名类定义。
    【解决方案4】:

    你可以试试这个:

    public String getCurrentMethod(){
        try{
            throw new Exception("");
        }catch(Exception e){
            return e.getStackTrace()[0].toString();
        }
        return ""; // This never happens
    }
    

    它将返回如下内容:
    ClassName.methodName():123

    【讨论】:

    • 注意:你不需要 throw Exception 来获取它的堆栈跟踪:new Exception().getStackTrace()[0] 应该可以正常工作。
    • 当然。这就是我在不编译的情况下编码得到的:)
    猜你喜欢
    • 2010-10-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2011-01-04
    • 1970-01-01
    • 2016-03-13
    • 2010-10-03
    相关资源
    最近更新 更多