请看下面的代码:
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/