Android 使用 Handler 避免内存泄漏的一些建议

来源:互联网 发布:anconda tensorflow 编辑:程序博客网 时间:2024/05/21 08:49

内存泄漏是 Android 开发中经常出现的错误。由于我们发送的消息会在 Handler 的 Looper 中不断轮循处理,这样 Handler 的声明周期比 Activity 会更长。所以在使用 Handler 时我们应该将其设为静态内部类,这样可以避免他的实例在 Activity 退出后还持有外部 Activity 的引用导致内存泄漏。还有在 Handler 的中使用外部成员变量是应该尽量使用弱引用,在 Activity 的 destroy 方法中清空消息这样也能减少内存泄漏的可能。下面展示下示例代码:

public class MainActivity extends AppCompatActivity {    private MyHandler mHandler = new MyHandler(this);    private TextView mTextView ;    private static class MyHandler extends Handler {//将Handler声明成静态内部类        private WeakReference<context> reference;//引用外部变量使用弱引用        public MyHandler(Context context) {        reference = new WeakReference<>(context);        }        @Override        public void handleMessage(Message msg) {            MainActivity activity = (MainActivity) reference.get();            if(activity != null){            activity.mTextView.setText("");            }        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTextView = (TextView)findViewById(R.id.textview);        loadData();    }    private void loadData() {        //...request        Message message = Message.obtain();        mHandler.sendMessage(message);    }    @Override    protected void onDestroy() {        super.onDestroy();        mHandler.removeCallbacksAndMessages(null);//清空 Handler 的消息操作    }}


阅读全文
0 0
原创粉丝点击