问题描述
我正在彻底重新设计我的 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
,感谢您的回答和提示。我要去看看。
有谁知道使用弱引用时对内存的影响?