java - Android 日志中 Activity 类名称后的美元 ($) 符号(非匿名内部类)

标签 java android debugging

<分区>

我正在查看我的应用程序的一些崩溃日志,堆栈跟踪显示如下内容:

at MyActivity.formatDouble(MyActivity.java:182)
at MyActivity.access$47(MyActivity.java:196)    
at MyActivity$28.onCameraChange(MyActivity.java:167)

“MyActivity”是一个 Activity ,因此不是匿名内部类。我不能确定第 3 行中的美元符号(以及第 2 行中的美元符号)

最佳答案

我怀疑第 167 行在一个匿名类 within MyActivity 中,而 access$47 只是一个允许 onCameraChange 调用 MyActivity 中的私有(private)方法。 (JVM 不允许这样做,因此 Java 编译器创建了一个允许这样做的方法。)

您可以通过一个简单的 Java 类轻松地看到这一点,甚至在 Android 上也不行:

public class Test {

    private static void privateMethod() {
        throw new RuntimeException();
    }

    public static void main(String[] args) throws Exception {
        Runnable runnable = new Runnable() {
            @Override public void run() {
                privateMethod();
            }
        };
        runnable.run();
    }
}

这给出了一个类似于您所显示的堆栈跟踪:

Exception in thread "main" java.lang.RuntimeException
        at Test.privateMethod(Test.java:4)
        at Test.access$000(Test.java:1)
        at Test$1.run(Test.java:10)
        at Test.main(Test.java:13)

Test$1.run 位于 main 的匿名内部类中,access$000 方法提供对 的访问私有(private)方法.

关于java - Android 日志中 Activity 类名称后的美元 ($) 符号(非匿名内部类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791407/

相关文章:

android - 相当于 objective-c 中的 LocationManager .onLocationChanged

java - 将批处理流式传输到 CSV java 7

java - 如何从 Firebase 存储获取下载 url?

java - 未使用 @Resource 注入(inject) WebServiceContext

android - 3rd-party Gradle插件可能是导致错误的原因

android - 使用 getSystemService 时出错

android - 在 APK 中动态启用/禁用调试功能的方法

python - 用于 Python 捕获模块隐私提示的静态代码分析器

java - 使用 Java 将 Ldap 用户关联到一个组

debugging - 如何在 Twig 模板中 var_dump 变量?