【问题标题】:Passing Activity or Context to other instance将 Activity 或 Context 传递给其他实例
【发布时间】:2015-10-16 03:59:28
【问题描述】:

您能否告诉我将activitycontext 传递给其他实例的最佳做法是什么(;)

但是……,

  • 通过什么比较好? ActivityContext
  • Activity 作为全局(公共静态活动活动)是个好主意

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

【问题讨论】:

  • 您不需要 Activity 或上下文,因为您只需在 toast 消息中调用 view.getContext() 就可以了

标签: android android-activity android-context


【解决方案1】:

Activity 传递给另一个不需要Activity 对象的对象通常是个坏主意。 Activity 扩展了 Context,因此它可以满足需要 Context 的方法。

在您的情况下,您可以从传递给方法的View 中获取Context。但是,如果您需要Context 用于其他目的,则应避免传递Activity 并执行Activity.getApplicationContext() 之类的操作。

原因是如果您将Activity 传递给的对象的寿命比Activity 长,那么对Activity 的引用将阻止Android 进行正确的垃圾收集(GC)并消耗不必要的内存.这称为“内存泄漏”。

编辑:

要处理需要致电Activity.findViewById() 的情况,请记住这些事项。首先,这是一个View 方法(http://developer.android.com/reference/android/view/View.html#findViewById(int)),所以一定要从正确的角度调用它。

其次,如果您需要来自ActivityView,您应该将其作为WeakReference 传递给

【讨论】:

  • 泰。所以,假设我有一个类(例如:class MyListener implements GridView.MultipleChoiceListener {...},我不想找到一个控件。我将如何做findViewById?例如:pastebin.com/KDDCqfBP
【解决方案2】:

从您的 Activity 中创建 Helper 类的对象,并将“this”作为上下文传递,例如

MyHelperclass helper=new MyHelperclass(this);

在 Helper 类中通过其构造函数获取此上下文

Context context;
MyHelperClass(Context context){
this.context=context;
}

现在您可以将此上下文传递给 Toast 类的 makeText() 方法。

【讨论】:

    【解决方案3】:

    Context 是一个提供有关应用程序或活动的全局信息的实体。您可以通过调用getApplicationContext()getContext()getBaseContext()this(在活动类中)来获取上下文。 Context 与其活动/应用程序的生命周期相关联,通常用于创建新对象、访问资源等。

    在您的代码中,您可以使用 Context 作为 Toast.makeText 的第一个参数。为一个类拥有全局Context 对象也很常见。你可以阅读一些关于Context用法的解释here

    您可能需要 Activity 对象,例如,如果您需要 start new activity 并创建 Intent 对象。

    【讨论】:

      【解决方案4】:

      创建一个新的接口并在您的 Activity 或 Service 或 Intentservice 类中实现,并将上下文作为回调返回

      public interface ContextWraperSolution {
          Context getContext();
      }
      

      将此接口作为构造函数参数传递给非Activity类并像使用它一样

      insanaceContextWraper.getContext()
      

      【讨论】:

        【解决方案5】:

        要使用另一个实例的上下文,您可以创建静态变量,然后在您希望使用的实例中引用它

        public class MyClassA(){
             public static Context context;
        
             private void setcontext()
             {
                 context = MyClassA.this;
             }
        
        }
        
        public class MyClassB(){
             private Context classA_context = MyClassA.context;    
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-03
          • 1970-01-01
          • 2011-08-04
          • 2017-01-25
          • 1970-01-01
          相关资源
          最近更新 更多