我有一个非活动类,它在我的活动类中创建了许多像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
声称为final
或protected
是否有任何优势 -
protected Context context;
或
final Context context;
答案 0 :(得分:1)
这取决于您使用Create对象的方式。如果您正在使用它:
public class MyActivity extends Activity {
public void someMethod() {
Create mCreate = new Create(this);
mCreate.doSomething();
}
}
没关系。如果你做了一些事情,比如使用在后台执行某些操作的内部类,并且活动已关闭,那么如果内部类尚未完成处理,则最终可能会泄漏上下文。
在使用context.getapplicationcontext vs传递活动(这是一个上下文)的情况下,后者在这种情况下更好,因为我假设你的创建类只为它所关联的活动创建视图;活动完成后,这些视图的生命周期可能会结束。
答案 1 :(得分:1)
Android Activity扩展了ContextThemeWrapper。
ContextThemeWrapper ultimatley扩展了Context。
因此将Context视为超类,将Activity视为子类。例如,Context有10个方法,Activity有10个方法和20个其他方法。
就内存泄漏而言,这完全取决于您如何使用它。确保销毁onDestroy()中所有未使用的对象以防止内存泄漏。见http://www.raizlabs.com/dev/2014/04/hunting-your-leaks-memory-management-in-android-part-2-of-2/
我更喜欢第一种方法。这样,您仍然可以访问Activity提供哪些Context可能没有的其他方法。
你可以这样做: public class Create extends SomethingThatRequiresASuper { 活动活动;
Create(Activity act){
this.activity = act;
super (act.getApplicationContext())
}
}
如果需要,您可以声明受保护的上下文。这只意味着该对象的范围是有限的。
不要宣布它是最终的。如果您这样做,您将无法在以后更改上下文。
答案 2 :(得分:0)
我认为通过上下文会很好。如果你在android框架中开发,你可以直接使用属性' mContext'在View中,但这不适用于SDK。