Passing a activity context into a static method, memory leak potential?

a 夏天 提交于 2019-11-27 18:00:42

问题


I've seen this particular technique for launching activities and it seems to me like a bad idea because of static contexts but I was hoping someone might have a legit reason behind this approach.

The activity you want to launch implements a static launch(Context context) method that sets up the intent, flags, etc and finally starts the activity.

public static void launch(Context context){
   Intent i = new Intent(context, SomeOtherActivity.class);
   // flag stuff
   context.startActivity(i);
}

Then a DifferentActivity could go and launch SomeOtherActivity with one line.

SomeOtherActivity.launch(DifferentActivity.this);

I like how it allows you to setup the flags in the activity away from the DifferentActivity that is launching it but it doesnt seem like a good enough reason to rationalize passing that activity's context into a static method.

Wouldn't this cause DifferentActivity to not be garbage collected because now that static method has a reference to it? This seems like a memory leak to me and probably not a good idea to do just to be able to keep the flags contained in the activity that is being created.

Is there something I'm missing here that makes this a good practice to do?


回答1:


Passing something into a static function isn't a potential memory leak. Storing a variable in a static variable is. This technique is perfectly safe. Its one I'd even recommend, as you can pass in variables to the function and store them in extras inside the class that is going to use those extras, reducing the number of places that need to know of their existence and how they're laid out



来源:https://stackoverflow.com/questions/43480343/passing-a-activity-context-into-a-static-method-memory-leak-potential

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