Android WeakReference处理内存泄漏

时间:2017-02-10 10:16:20

标签: android weak-references

请检查以下代码, 我们可以在Utils类中使用如下所示的WeakReferences来处理上下文内存泄漏吗?

private static final String TAG = "Utils";
private static Utils instance;
private Context context;

public Utils(WeakReference<Context> context) {
    this.context = context.get();
}

public static synchronized final Utils getInstance(Context context) {
    if (instance == null) {
        instance = new Utils(new WeakReference<Context>(context));
    }
    return instance;
}

3 个答案:

答案 0 :(得分:0)

<div class="col-md-5 block block-one text-center"> <h6> <span></span> <span><strong class="fig-number">27</strong>%</span> </h6> <p> <span>Employer said</span> a bad hire cost them more than $50,000 </p> </div>

构造函数中的

:(如果你试图制作单例类,请将其设为私有)

private WeakReference<Context> context;

其他一切看起来都不错。

答案 1 :(得分:0)

您可以使用Leak Canary检查内存泄漏。它做同样的事情,但只有一行代码。它会告诉你每次内存泄漏的根源。

答案 2 :(得分:0)

不,WeakReference可以随时返回null,因此它使得这种无意义。

每次访问时,您都会检查WeakReference是否为null,然后您需要通过在methods参数中提供上下文来处理该情况,因此无需在字段中存储上下文。

更好(但不是最好)的解决方案是使用ApplicationContext,//////////////////////////////////////////////////////////////////////// //////////REMOVE STANDARD <P> FROM TINYMCE EDITOR///////////////////////// /////////////////////////////////////////////////////////////////////// function my_format_TinyMCE( $in ) { $in['forced_root_block'] = ""; $in['force_br_newlines'] = TRUE; $in['force_p_newlines'] = FALSE; return $in; } add_filter( 'tiny_mce_before_init', 'my_format_TinyMCE' ); ,最好的方法是将上下文传递给每个方法调用。