将上下文传递给许多方法是否正常?

时间:2019-04-19 22:09:35

标签: android android-activity singleton android-context

我在许多活动中使用不同的对象(例如大的Bitmap),这就是为什么我创建了一个名为DataHolder的类的原因,该类将很多共享对象作为静态对象保存。

但是,我也经常使用共享首选项,这就是为什么该数据类还包含一个名为Shop的共享首选项帮助程序类的原因。

这与共享位图等结合导致我不得不将上下文传递给使用Shop的每个方法!我可能有一个上下文对象作为50%方法的参数,这很烦人。

大量传递上下文是否正常?

如何改善我的数据结构?

1 个答案:

答案 0 :(得分:0)

您可能会考虑拥有一个全局ApplicationContext,它可以满足您加载DataHolder对象的目的。通常,我不使用此类上下文,但是,我认为您的情况非常适合使用全局应用程序上下文。

为此,您可以考虑在项目中使用以下类。

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类添加到您的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>

因此,您可能没有在单个空间中提供上下文,而是传递了Context,从而改善了数据结构。希望有帮助!