具有弱引用和单例的 Android 应用

问题描述

我正在彻底重新设计我的 Android 应用。以前,一切都在同一个班级。 所以我尝试重新绘制所有内容,以便 Admob 的代码比放入主线程的文档建议更清晰,我在课堂上将代码的不同部分分开。所以我使用了两种技术:我创建了一个 Songleton,其中包含我想要经常访问的变量,并通过弱引用调用我的类。

这是它的样子: 比如需要更新游戏IU的UIManager类有一个弱引用如下:

 private static SoftReference<UIManager> ManageUI;

static{ManageUI= new SoftReference<>(null);}

static UIManager get()
{

    if(ManageUI.get()==null)
    {
        ManageUI= new SoftReference<>(new UIManager());
    }

    return ManageUI.get();

}

GameManager Manager=GameManager.getInstance();

例如为了能够使用 findviewbyid,我将作为主线程的主类放在方法参数中

包含我想要永久访问的所有变量的单例如下所示:

  private GameManager()
{}

/** Holder */
private static class Manager
{
    /** Instance unique non préinitialisée */
    private final static GameManager instance = new GameManager();
}

/** Point d'accès pour l'instance unique du singleton */
public static GameManager getInstance()
{
    return Manager.instance;
}

为了将所有在不同的类中,我将参数传递给我的方法,这样我就可以像这样调用属于 Activity 的东西: (我的主类叫做 GamePlay)

 void OpenGlobalScene(GamePlay activity)
{


    Manager.OnTitle=false;


    if (!checkLayout(activity,R.id.globalscene)) {


        LayoutInflater(activity,9,true);
        LinearLayout GamePlan = (LinearLayout) activity.findViewById(R.id.globalscene);
        GamePlan.setAlpha(Manager.AlphaBord);


    }



}

目前,除了旧的 android 手机 4.4.2 上的一些缓慢之外,我没有注意到任何问题。 此外,与我的旧代码相比,所有内容都在同一类中,更改代码段要容易得多(进入 inapp billing V3 更简单,因为所有内容都在一个类中,我像其他类一样使用弱引用

我的问题是: - 这样的结构可能带来什么问题? 我还选择了该结构来不加载或将无用的东西留在内存中 - Android 将如何从内存中擦除正在进行的操作,并使用弱引用调用? - 正如你所看到的,我将活动有参数传递给方法,有时我将它从一个方法传递到另一个方法。这个事实会引起一些麻烦吗?

感谢您的帮助。

解决方法

Check Dagger2 优于经典单例 https://developer.android.com/training/dependency-injection/dagger-android?hl=es-419

,

感谢您的回答和提示。我要去看看。

有谁知道使用弱引用时对内存的影响?