This Handler class should be static or leaks maight occur

在使用Handler更新UI的时候出现警告:
这里写图片描述

意思是说:这个Handler 必须是static的,否则就会引发内存泄露。

解决:
让Handler持有一个对Activity的WeakReference,这样就不会泄露Activity的上下文了:

public class TestActivity extends AppCompatActivity {

    private final MyHandler mMyHandler = new MyHandler(this);

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mMyHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // TODO: 2018/3/2  
            }
        }, 60 * 10 * 1000);
    }

    private static class MyHandler extends Handler {

        private WeakReference<TestActivity> mWeakReference = null;

        private MyHandler(TestActivity activity) {
            mWeakReference = new WeakReference<TestActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            TestActivity activity = mWeakReference.get();
            if (activity != null) {
                // TODO: 2018/3/2
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/sqf251877543/article/details/79423204