技术收藏Android安卓行进中

Android 日常开发的内存泄漏与优化

2016-11-24  本文已影响519人  Venus_明

一.介绍

Android机器中,内存使用问题一直是个十分重要,引人注目的问题,当我们代码编写不当,或者逻辑没处理好,就会导致机器运行缓慢,有时候甚至死机。
对于程序员来说,这很致命,所以要去理解内存的使用,去避免内存的泄露,不断优化内存,而当出现内存泄露导致的问题,我们能够分析log,并且会用工具MAT。

二.什么场景会导致内存泄露

内存泄露其实就是占用内存的对象使用后没有被回收。在这种现象下,当java程序运行一段时间,占用的内存越来越大,导致该进程的内存占用达到Android为进程分配的内存使用上限,程序就死了。

三.内存优化注意点

1.图片优化

在Android中显示Bitmap图片,会造成一定的内存消耗,甚至会导致OOM异常爆发,所以对于图片的显示,要做一定的处理。

2.线程、异步任务优化

因为线程、异步任务等生命周期的不可控性,成为了内存泄露的另一个源头。平常中,因为对它的频繁使用,所以,我们应慎重对待它。

public abstract class WeakAsyncTask < Params,Progress,Result,WeakTarget > 
                 extends AsyncTask < Params,Progress,Result > {
    protected WeakReference < WeakTarget > mTarget;

    public WeakAsyncTask(WeakTarget target) {
        mTarget = new WeakReference < WeakTarget > (target);
    }

    /** {@inheritDoc} */
    @Override protected final void onPreExecute() {
        final WeakTarget target = mTarget.get();
        if (target != null) {
            this.onPreExecute(target);
        }
    }

    /** {@inheritDoc} */
    @Override protected final Result doInBackground(Params...params) {
        final WeakTarget target = mTarget.get();
        if (target != null) {
            return this.doInBackground(target, params);
        } else {
            return null;
        }
    }

    /** {@inheritDoc} */
    @Override protected final void onPostExecute(Result result) {
        final WeakTarget target = mTarget.get();
        if (target != null) {
            this.onPostExecute(target, result);
        }
    }

    protected void onPreExecute(WeakTarget target) {
        // No default action  
    }

    protected abstract Result doInBackground(WeakTarget target, Params...params);

    protected void onPostExecute(WeakTarget target, Result result) {
        // No default action  
    }
}

所以内存优化方面,还有很多方面需要补足,还需努力。

四.内存分析

不管是对内存使用情况的分析,还是排查内存泄露与溢出,我都推荐去好好看看以下大神的文章,相信看过后,会有很大的收获,我就是如此=。=
android 中如何分析内存泄露
Android最佳性能实践(二)——分析内存的使用情况

小小的总结与推荐阅读,希望可以帮助到大家~
Ps:以前博客迁移到简书,如果你觉得文章还可以,麻烦底下点个“喜欢”!

上一篇 下一篇

猜你喜欢

热点阅读