从Android中的静态处理程序调用非静态方法

时间:2013-01-10 02:26:07

标签: android

我今天一直在谷歌搜索,我找不到一个能回答我问题的简单解决方案。我有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警告突然出现..我似乎无法找到一个简单的解决方案来摆脱它。谢谢。

1 个答案:

答案 0 :(得分:0)

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