求大神解答,解决handler内存溢出用了弱引用,我这种写法为什么还会警告,

public class MainActivity extends AppCompatActivity {

private static class MyHandler extends Handler{
    WeakReference<AppCompatActivity> mactivity;
    public MyHandler(AppCompatActivity activity)
    {
        mactivity=new WeakReference<AppCompatActivity>(activity);
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final MyHandler handler=new MyHandler(this){
        @Override
    public void handleMessage(Message msg)
        {

        }
    };
}

}

2个回答

你应该把重写handleMessage()方法放在自定义的MyHandler类里面,不应该放在new 出来的对象里面。
这样:

 private static class MyHandler extends Handler {
        WeakReference<AppCompatActivity> mActivity;
        public MyHandler(Activity activity)
        {
            mActivity=new WeakReference<AppCompatActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:

                    break;
                default:
                    break;
            }
        }
    }

在创建对象时,直接这样就行了:MyHandler handler=new MyHandler(this);
另外建议你:mactivity改为mActivity,因为前者命名不够规范,不知道你有没注意到studio环境下,该变量有下划线。

qq_24793481
小学生技术猿 但是这样很多要在handMessage()里用的变量的实例化都要在oncreate()之外了
接近 4 年之前 回复

因为你的引用不对

qq_24793481
小学生技术猿 能不能说说为什么,我只是在oncreate()里面定义Myhandler的内部类,重写他的handleMessage()方法
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐