繁体   English   中英

传递活动的上下文(防止内存泄漏)

[英]Passing Activity's context (prevent memory leak)

我有一个非活动类,该类在我的活动类中创建许多视图,例如ImageView和TextView。

为此,我需要将活动上下文从activity class传递到non-activity class 这是我的non-activity class的代码-

public class Create {
    Activity activity;

    Create(Activity act){
        activity = act;
    }
}

这是一个好习惯吗? 我应该像这样使用getApplicationContext()吗? 两种方法有什么区别? --

public class Create {
    Context context;

    public Create(Context context){
        this.context = context.getApplicationContext();
    }
}

如果使用上述方法,会不会发生内存泄漏? 哪种方法更好? 使用后如何销毁上下文以防止内存泄漏?

这样将Activity/Context声明为finalprotected有什么好处?

protected Context context;

要么

final Context context;

这取决于您如何使用Create对象。 如果您像这样使用它:

public class MyActivity extends Activity {
    public void someMethod() {
        Create mCreate = new Create(this);
        mCreate.doSomething();
    }
}

没事的 如果您使用内部类在后台执行某些操作,并且该活动已关闭,例如,如果内部类尚未完成处理,则可能会泄漏上下文。

在使用context.getapplicationcontext与传递活动(这是一个上下文)的情况下,后者在这种情况下更好,因为我假设您的create类只是为其关联的活动创建视图。 活动完成后,这些视图的生命周期可能已经结束。

Android Activity扩展了ContextThemeWrapper。

ContextThemeWrapper ultimatley扩展了Context。

因此,可以将上下文视为超类,将活动视为子类。 例如,上下文具有10个方法,活动具有相同的10个方法以及20个其他方法。

就内存泄漏而言,这完全取决于您的使用方式。 确保销毁onDestroy()中所有未使用的对象,以防止内存泄漏。 参见http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/

我更喜欢第一种方法。 这样,您仍然可以访问Activity提供的上下文可能没有的其他方法。

您可以执行以下操作:公共类Create扩展SomethingThatRequiresASuper {

Create(Activity act){
    this.activity = act;
super (act.getApplicationContext())
}

}

如果需要,可以声明上下文受保护。 那只是意味着该对象的范围是有限的。

不要宣布最终。 如果这样做,以后将无法更改上下文。

我认为过去的情况会很好。 而且,如果您在android框架中进行开发,则可以直接在View中使用属性'mContext',但这在SDK中不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM