Needing Context in non-Activity classes

吃可爱长大的小学妹 提交于 2019-11-27 13:25:12

问题


I have some classes within my application that need to call Android functions that require the Context as a parameter. I don't have it as the class is not a subclass of the Activity class.

What is the correct way to tackle this problem?

  1. Pass it as a parameter on each call?
  2. Pass it at class instantiation and keep it?

回答1:


It depends on the role of the class. But anyway pass ApplicationContext but not Activity one. If you pass Activity context gc can't remove it from the memory when after you don't need activity anymore. But application context is used while application was not finished by OS.Refer Avoid Memory Leaks




回答2:


Pass it as a parameter. Or better yet, get the application context to avoid memory leaks.

public class Example {
    protected Context context;

    public Example(Context context){
        this.context = context.getApplicationContext();
    }
}



回答3:


I'm pretty much always going with a constructor parameter approach. I pass it in the instantiation and keep a private reference in the instantiated class.

You have to think about one important thing. If the class you pass the Context will exist longer than the Activity instantiating it then you should use the application context. If that class is doing UI stuff you will need an activity context.

Make sure that the class you are passing an activity context to won't last longer than the Activity or you'll leak the entire activity.

If you don't do UI stuff then go with the application context.




回答4:


I pass it as a parameter, i think its de best form to do it




回答5:


Pass it at class instantiation and keep it.

One typical example is when you create a db helper. See this link




回答6:


I've answered this question here also.

You can do that using ContextWrapper, as described here.

For example:

public class MyContextWrapper extends ContextWrapper {

    public MyContextWrapper(Context base) {
      super(base);
   }

}

and use that class as it were Context




回答7:


The best way is to follow Bean approach:

public class Example {
    protected Context getContext() {
        ...
    }

    ...
}

Then it depends on possibilities to access context. If class is fully independent then constructor parameter and private field seems best approach.

But that bean property way shields you from further code changes.



来源:https://stackoverflow.com/questions/5498669/needing-context-in-non-activity-classes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!