将Activity或Context传递给其他实例

时间:2015-10-16 03:59:29

标签: android android-activity android-context

您能否告诉我将activitycontext传递给其他实例(;)

的最佳做法

但是...,

  • 最好通过什么? ActivityContext
  • 最好将Activity作为全局(公共静态活动活动)

here是我的代码。你会改变什么? (基于良好的Android实践)

5 个答案:

答案 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;    
}