您能否告诉我将activity
或context
传递给其他实例(;)
但是...,
Activity
或Context
Activity
作为全局(公共静态活动活动)here是我的代码。你会改变什么? (基于良好的Android实践)
答案 0 :(得分:8)
将Activity
传递给另一个不特别需要Activity
对象的对象通常是个坏主意。 Activity
扩展了Context
,因此它可以满足需要Context
的方法。
在您的情况下,您可以从传递给该方法的Context
获取View
。但是,如果您出于其他目的需要Context
,则应避免传递Activity
并执行Activity.getApplicationContext()
之类的操作。
这样做的原因是,如果您将Activity
传递的对象的生命长于Activity
,则对Activity
的引用将阻止Android执行正确的垃圾收集({{ 1}})并消耗不必要的内存。这被称为"内存泄漏"。
编辑:
要处理需要致电GC
的情况,请记住这些事项。首先,这是Activity.findViewById()
方法(http://developer.android.com/reference/android/view/View.html#findViewById(int)),所以请务必从正确的视图中调用它。
其次,如果您需要View
中的View
,则应将其作为Activity
答案 1 :(得分:1)
从您的活动中创建帮助程序类的对象并传递'这个'作为背景,说
MyHelperclass helper=new MyHelperclass(this);
在Helper类中通过其构造函数获取此上下文
Context context;
MyHelperClass(Context context){
this.context=context;
}
现在您可以将此上下文传递给Toast类的makeText()方法。
答案 2 :(得分:0)
Context
是一个提供有关应用程序或活动的全局信息的实体。您可以通过调用getApplicationContext()
,getContext()
,getBaseContext()
或this
(在活动类中时)来获取上下文。
Context
与其活动/应用程序的生命周期相关联,通常用于创建新对象,访问资源e.t.c.
在您的代码中,您可以使用Context
作为Toast.makeText
中的第一个参数。为类创建全局Context
对象也很常见。您可以阅读有关Context
使用here
如果您需要start new activity并创建Intent
对象,则可能需要Activity对象。
答案 3 :(得分:0)
在Activity或Service或Intentservice类中创建一个新接口并实现,并将上下文作为回调返回
public interface ContextWraperSolution {
Context getContext();
}
将此接口作为构造函数参数传递给非Activity类,并像
一样使用它insanaceContextWraper.getContext()
答案 4 :(得分:0)
要使用其他实例的上下文,您可以创建静态变量,然后在您希望使用的实例中引用它
public class MyClassA(){
public static Context context;
private void setcontext()
{
context = MyClassA.this;
}
}
public class MyClassB(){
private Context classA_context = MyClassA.context;
}