Passing Activity or Context to other instance

后端 未结 5 1796
渐次进展
渐次进展 2020-12-19 05:36

Can you please tell me whats the best practice to pass activity or context to other instance(;)

But...,

  • What is better to pas
相关标签:
5条回答
  • 2020-12-19 05:53

    Context is an entity which provides global information about application or activity. You can get the context by invoking getApplicationContext(), getContext(), getBaseContext() or this (when in the activity class). Context is tied with lifecycle of its activity/application and commonly used for creating new objects, accessing resources e.t.c.

    In your code you can use Context as a first parameter in Toast.makeText . It's also common to have global Context object for a class. You may read some explanation about Context usage here

    You may need Activity object for example if you need to start new activity and create Intent object.

    0 讨论(0)
  • 2020-12-19 05:57

    Create a new Interface and implement in your Activity or Service or Intentservice class and return context as a callback

    public interface ContextWraperSolution {
        Context getContext();
    }
    

    Pass this interface as a constructor parameter to non-Activity class and use it like

    insanaceContextWraper.getContext()
    
    0 讨论(0)
  • 2020-12-19 06:01

    Create Object of The Helper class from your Activity and pass 'this' as the context, say

    MyHelperclass helper=new MyHelperclass(this);
    

    In the Helper class Get this Context via its constructor

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

    Now You can pass this context to the makeText() method of Toast class.

    0 讨论(0)
  • 2020-12-19 06:08

    Passing an Activity into another object that does not specifically require the Activity object is usually a bad idea. Activity extends Context so it works to satisfy a method that requires Context.

    In your case, you can get the Context from the View that is passed into the method. However, if you need the Context for other purposes, you should avoid passing Activity and do something like Activity.getApplicationContext().

    The reason for this is if the object you pass an Activity into lives longer than the Activity, the reference to the Activity will prevent Android from doing proper Garbage Collection (GC) and consume unnecessary memory. This is called a "memory leak".

    EDIT:

    To handle situations where you need to call Activity.findViewById() keep these things in mind. First, that is a View method (http://developer.android.com/reference/android/view/View.html#findViewById(int)) so be sure to call it from the correct view.

    Second, if you need a View from an Activity you should pass it in as a WeakReference

    0 讨论(0)
  • 2020-12-19 06:12

    To use context from another instance, you can create static variable then refer to it in instance you wish to use

    public class MyClassA(){
         public static Context context;
    
         private void setcontext()
         {
             context = MyClassA.this;
         }
    
    }
    
    public class MyClassB(){
         private Context classA_context = MyClassA.context;    
    }
    
    0 讨论(0)
提交回复
热议问题