android - Android 中的处理程序和内存泄漏

标签 android handler

请看下面的代码:

public class MyGridFragment extends Fragment{
    
    Handler myhandler = new Handler() {
        @Override
        public void handleMessage(Message message) {
            switch (message.what) {
                case 2:   
                    ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
                    urls.addAll(theurls);
                    theimageAdapter.notifyDataSetChanged();
                    dismissBusyDialog();
                    break;
            }
        }
    }
}

当我像这样使用处理程序时,我收到一个警告“处理程序应该是静态的,否则它很容易出现内存泄漏。”谁能告诉我最好的方法是什么?

最佳答案

我最近在自己的代码中更新了类似的内容。我刚刚将匿名 Handler 类设置为 protected 内部类,并且 Lint 警告消失了。看看下面的代码是否适合你:

public class MyGridFragment extends Fragment{

    static class MyInnerHandler extends Handler{
        WeakReference<MyGridFragment> mFrag;

        MyInnerHandler(MyGridFragment aFragment) {
            mFrag = new WeakReference<MyGridFragment>(aFragment);
        }

        @Override
        public void handleMessage(Message message) {
            MyGridFragment theFrag = mFrag.get();
            switch (message.what) {
            case 2:
                ArrayList<HashMap<String,String>> theurls = (ArrayList<HashMap<String,String>>) message.obj;
                theFrag.urls.addAll(theurls);
                theFrag.theimageAdapter.notifyDataSetChanged();
                theFrag.dismissBusyDialog();
                break;
            }//end switch
        }
    }
    MyInnerHandler myHandler = new MyInnerHandler(this);
}

您可能需要更改我放置“theFrag”的位置。因为我只能猜测那些引用的内容。

关于android - Android 中的处理程序和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11278875/

相关文章:

android - 如何使用 Android SDK 监控 GPS 适配器的状态?

android - 避免内存不足错误的最佳方法 - Android

android - 使用 Amazon Android API 下载文件

java - 从其他类的方法调用状态栏通知

缺少 x86 架构的 Android 库 .so? (Vuforia)

android滚动条拇指长度

java - 阅读有关蓝牙的 Android 开发人员?

java - SOAP 处理程序实现破坏了 Web 服务

multithreading - iOS - 默认在哪个队列选择器上运行?

java - 音乐停止时的 Android MediaPlayer 处理程序