防止内存泄露的几个注意点
博客专区 > Bugwang 的博客 > 博客详情
防止内存泄露的几个注意点
Bugwang 发表于1年前
防止内存泄露的几个注意点
  • 发表于 1年前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

  1. 资源对象没关闭。
    如Cursor、File等资源。他们会在finalize中关闭,但这样效率太低。容易造成内存泄露。
    SQLiteCursor,当数据量大的时候容易泄露
  2. 使用Adapter时,没有使用系统缓存的converView。
  3. 即时调用recycle()释放不再使用的Bitmap。
    适当降低Bitmap的采样率:

    BitmapFactory.Options options = newBitmapFactory.Options(); options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一 Bitmap bitmap =BitmapFactory.decodeStream(cr.openInputStream(uri), null, options); preview.setImageBitmap(bitmap);

  4. 使用application的context来替代activity相关的context。
    尽量避免activity的context在自己的范围外被使用,这样会导致activity无法释放。
  5. 注册没取消造成内存泄露
    如:广播
  6. 集合中的对象没清理造成的内存泄露我们通常把一些对象的引用加入到了集合中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。

7.Handler应该申明为静态对象, 并在其内部类中保存一个对外部类的弱引用。

static class MyHandler extends Handler 
{
       WeakReference<Activity > mActivityReference;
       MyHandler(Activity activity)
      { 
            mActivityReference= new WeakReference<Activity>(activity);
      }
     @Override
     public void handleMessage(Message msg)
    {
           final Activity activity = mActivityReference.get();
           if (activity != null)
          {
                 mImageView.setImageBitmap(mBitmap);
          }    
     }
}
共有 人打赏支持
粉丝 0
博文 10
码字总数 1482
×
Bugwang
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: