【问题标题】:Calling a non static method from a static Handler in Android从 Android 中的静态 Handler 调用非静态方法
【发布时间】:2012-12-24 08:47:57
【问题描述】:

我这天一直在谷歌搜索,但找不到一个简单的解决方案来回答我的问题。我有 Lint 警告“这个 Handler 类应该是静态的,否则可能会发生泄漏”所以我遵循 Romain Guy 和许多其他人提出的逻辑,并按如下方式构建了我的 Handler..

public static class MyHandler extends Handler {
    private final WeakReference<CustomTrophyCreateActivity> mActivity;

    MyHandler(CustomTrophyCreateActivity activity) {
        mActivity = new WeakReference<CustomTrophyCreateActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {

    if (mActivity != null) {
    Activity activity = mActivity.get();
        if (activity != null) {
            // Call non static method in enclosing activity.. CANT DO THIS
            startUploadPhoto();
        }
    }           
}

所以基本问题是.. 我如何从已设为静态的 Handler 中调用此非静态方法以避免内存泄漏??

我真的很想避免将 startUploadPhoto() 设为静态,因为 1) 不需要,2) 更改变量需要做大量工作。我完全理解为什么会弹出这个 lint 警告。我似乎无法找到一个简单的解决方案来摆脱它。谢谢你。

【问题讨论】:

  • 你的活动就在那里,不是吗?
  • 是的,活动是封闭类。我不知道你要去哪里。
  • 你不能只做activity.startUploadPhoto();吗? (如果输入正确)
  • 啊,看看我的错误..我试过了,但皮棉标记仍然存在..我没有意识到皮棉标记改变了..它需要从活动转换为 CustomTrophyCreateActivity..我想在进行更改后将鼠标悬停在 lint 标记上可以节省时间(比如几个小时):(
  • 嗯.. 事情很奇怪.. 请看我编辑的问题。感谢您的宝贵时间。

标签: android


【解决方案1】:

您需要使用引用来调用方法,而不是隐式封闭类。试试activity.startUploadPhoto();

【讨论】:

  • 谢谢,看我上面的评论。我快疯了。只需要投射。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多