将上下文传递给许多方法是否正常?
Is it normal to pass on context to lots of methods?
我在许多活动中使用不同的对象(例如大型位图),这就是我创建一个名为 DataHolder
的 class 的原因,它将许多共享对象作为静态对象保存。
但是,我也经常使用共享首选项,这就是为什么该数据 class 还包含名为 Shop
的共享首选项助手 class 的单例。
这与共享位图等结合导致我必须将上下文传递给使用 Shop
的每个方法!我可能有一个上下文对象作为我 50% 的方法的参数,这很烦人。
大量传递上下文是否正常?
如何改进我的数据结构?
您可以考虑拥有一个全局 ApplicationContext
,它可以满足您加载 DataHolder
对象的目的。通常我不使用这样的上下文,但是,在我看来,您的情况非常适合使用全局应用程序上下文。
为此,您可以考虑在您的项目中加入以下 class。
import android.content.Context;
import android.support.multidex.MultiDexApplication;
public class MyApplication extends MultiDexApplication {
private static MyApplication myApplicationInstance;
public static MyApplication getMyApplicationInstance() {
return myApplicationInstance;
}
@Override
public void onCreate() {
super.onCreate();
myApplicationInstance = this;
}
public static Context getAppContext() {
return getMainApplicationInstance().getApplicationContext();
}
}
并将此 Application
class 添加到您的 AndroidManifest.xml
,在 application
标签下,如下所示。
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Your activity declarations go here-->
</application>
因此,您可以从单个 space 提供一个上下文,而不是传递 Context
,从而改进您的数据结构。希望对您有所帮助!
我在许多活动中使用不同的对象(例如大型位图),这就是我创建一个名为 DataHolder
的 class 的原因,它将许多共享对象作为静态对象保存。
但是,我也经常使用共享首选项,这就是为什么该数据 class 还包含名为 Shop
的共享首选项助手 class 的单例。
这与共享位图等结合导致我必须将上下文传递给使用 Shop
的每个方法!我可能有一个上下文对象作为我 50% 的方法的参数,这很烦人。
大量传递上下文是否正常?
如何改进我的数据结构?
您可以考虑拥有一个全局 ApplicationContext
,它可以满足您加载 DataHolder
对象的目的。通常我不使用这样的上下文,但是,在我看来,您的情况非常适合使用全局应用程序上下文。
为此,您可以考虑在您的项目中加入以下 class。
import android.content.Context;
import android.support.multidex.MultiDexApplication;
public class MyApplication extends MultiDexApplication {
private static MyApplication myApplicationInstance;
public static MyApplication getMyApplicationInstance() {
return myApplicationInstance;
}
@Override
public void onCreate() {
super.onCreate();
myApplicationInstance = this;
}
public static Context getAppContext() {
return getMainApplicationInstance().getApplicationContext();
}
}
并将此 Application
class 添加到您的 AndroidManifest.xml
,在 application
标签下,如下所示。
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Your activity declarations go here-->
</application>
因此,您可以从单个 space 提供一个上下文,而不是传递 Context
,从而改进您的数据结构。希望对您有所帮助!