2015-10-16 55 views
4

能否请你告诉我什么是最好的做法是通过activitycontext到其他实例(;)传递活动或上下文其他实例

但是......,

  • 更好的是传递? ActivityContext
  • 是有Activity为全球(公共静态活动活动)

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

+0

你不需要活动或上下文tho,因为你可以在你的吐司消息中调用view.getContext(),你应该没事的 – k0sh

回答

0

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

在您的代码中,您可以使用Context作为Toast.makeText中的第一个参数。为一个班级设立全球性的Context对象也很常见。你可以阅读一些解释关于Context使用here

您可能需要活动的对象,例如,如果你需要start new activity创造Intent对象。

5

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)),所以一定要从正确的角度调用它。

第二,如果你需要从Activity一个View你应该把它作为一个WeakReference

+0

Ty。所以,让我说我有一个类(例如:'类MyListener实现GridView.MultipleChoiceListener {...}',我不想找到一个控件。我将如何做'findViewById'?例如:http:// pastebin .com/KDDCqfBP –

+0

我编辑了我的回复 – Jim

1

从您的活动创建助手类的对象,并通过“本”为背景,说

MyHelperclass helper=new MyHelperclass(this); 

在Helper类通过其构造函数获取此背景下

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

现在,你可以通过这方面的makeText ()Toast类的方法。

0

创建一个新的接口,并在您的活动或服务或Intentservice类实现并返回上下文回调

public interface ContextWraperSolution { 
    Context getContext(); 
} 

通过这个接口作为一个构造函数参数非活动类,并使用它像

insanaceContextWraper.getContext() 
0

要从另一个实例中使用的情况下,您可以创建静态变量则是指它的情况下要使用

public class MyClassA(){ 
    public static Context context; 

    private void setcontext() 
    { 
     context = MyClassA.this; 
    } 

} 

public class MyClassB(){ 
    private Context classA_context = MyClassA.context;  
} 
相关问题