1

这一天我一直在谷歌搜索,但找不到一个简单的解决方案来回答我的问题。我有 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();
        }
    }           
}

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

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

4

1 回答 1

0

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

于 2013-01-10T02:33:41.460 回答