android对于内存泄露和内存溢出的见解和简要解决方案

内存泄露

内存没有及时的被收回可理解为内存泄露;
例如Activity中有一个耗时操作,耗时操作中有对Activity强引用;
当Activtiy被用户关闭时,耗时操作还没结束的话,此时activtiy不能被释放,造成内存泄露!
解决方案:
耗时操作中使用弱引用指向activtiy,这样activtiy的生命周期就不受耗时操作的影响了!
例子:

    static class MyTask extends AsyncTask {
        private WeakReference mWrTv;
        public MyTask(TextView textView) {
            mWrTv = new WeakReference<>(textView);
        }
        @Override
        protected String doInBackground(String... strings) {
            for (int i = 0; i <= 10; i++) {
                publishProgress(i);
                Thread.sleep(1000);
            }
            return "";
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            int num = values[0];
            //这里可能为空,因为当activtiy被收回后mWrTv就会空,因此需要进行判断
            if (mWrTv.get() != null) {
                mWrTv.get().setText(num + "");
            }
        }
    }

内存溢出

当创建对象时,没有足够的内存时,便出现内存溢出(OOM),常见为listview加载图片;
解决方案:
采用软引用方式对图片对象进行引用;
当内存不足时系统便收回软引用的图片,从而解决oom;

你可能感兴趣的:(android对于内存泄露和内存溢出的见解和简要解决方案)