【问题标题】:Is it normal to pass on context to lots of methods?将上下文传递给许多方法是否正常?
【发布时间】:2019-09-10 02:36:48
【问题描述】:

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

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

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

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

如何改进我的数据结构?

【问题讨论】:

  • “分离”是什么意思?我需要从不同的活动中访问这两个类,而无需修改 DataHolder 内其他数据的 Shop 的不同实例

标签: android android-activity singleton android-context


【解决方案1】:

您可能会考虑使用全局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,您可能会从单个空间提供上下文,从而改进您的数据结构。希望对您有所帮助!

【讨论】:

  • 我不能使用getApplicationContext(),因为我无法在大多数相关类中访问该方法......当然我使用this作为活动等的上下文,但在非-我依赖于传递上下文的活动类编辑:我也不能在Shop 中存储Context,因为那样我会持有一个对象(Shop 的单例)它将上下文作为静态对象保存,这是内存泄漏。 (shop-singleton静态存储在DataHolderclass中)
  • 嘿,我已经更新了代码。请立即检查。是的,我忘记了您使用的不是ActivityFragment 的单例类。因此,您需要在初始化Shop 时首先从Activity 传递一个上下文。然后你可以考虑在其他地方使用它。希望你能明白。
  • 我明白了。好吧,让我写另一个解决方案。 :)
  • 好吧,我之前也是这么干的,但问题是我只能在 MainActivity 运行时使用它,对吧?
  • 工作就像一个魅力,除了我必须在getAppContext() 中使用getMainApplicationInstance().getApplicationContext(); 而不是getApplicationContext(); 因为getApplicationContext(); 不能被静态调用
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多