Handlers and memory leaks in Android

前端 未结 6 2131
攒了一身酷
攒了一身酷 2020-11-29 18:14

Please have a look at the code below:

public class MyGridFragment extends Fragment{

     Handler myhandler = new Handler() {
    @Override
    public void h         


        
6条回答
  •  一整个雨季
    2020-11-29 18:57

    I recently updated something similar in my own code. I just made the anonymous Handler class a protected inner class and the Lint warning went away. See if something like the below code will work for you:

    public class MyGridFragment extends Fragment{
    
        static class MyInnerHandler extends Handler{
            WeakReference mFrag;
    
            MyInnerHandler(MyGridFragment aFragment) {
                mFrag = new WeakReference(aFragment);
            }
    
            @Override
            public void handleMessage(Message message) {
                MyGridFragment theFrag = mFrag.get();
                switch (message.what) {
                case 2:
                    ArrayList> theurls = (ArrayList>) message.obj;
                    theFrag.urls.addAll(theurls);
                    theFrag.theimageAdapter.notifyDataSetChanged();
                    theFrag.dismissBusyDialog();
                    break;
                }//end switch
            }
        }
        MyInnerHandler myHandler = new MyInnerHandler(this);
    }
    

    You may have to change where I put "theFrag." as I could only guess as to what those referenced.

提交回复
热议问题