在查看有关单身人士,全局变量和扩展应用程序类的各种信息后,我想出了我认为可行的解决方案,但我想知道是否有理由不这样做。
我创建了一个类:
public class GlobalVariables {
private static GlobalVariables instance;
private static Boolean testVar;
//other private static variables.
//setters
public void setTestVar(Boolean vAR)
{
GlobalVariables.testVar = vAR;
}
//other similar setters from private static variables above.
//getters
public Boolean getTestVar() {
return GlobalVariables.testVar;
}
//other similar getters from private static variables above.
public static synchronized GlobalVariables getInstatnce() {
if(instance==null) {
instance=new GlobalVariables();
}
return instance;
}
}
在我的活动,服务,广播接收器......:
private GlobalVariables g = GlobalVariables.getInstance();
// getting the value
Boolean bVar = g.getTestVar();
// do somethings with bVar.
...
bVar = true;
// set GlobalVariables.testVar
g.setTestVar(bVar);
同样,有没有理由不使用它来在活动,服务,broadcastReceivers和其他任何类之间传递变量?
答案 0 :(得分:3)
在Android上使用Singletons本身并不是什么坏事,the Android guide even suggests it as one way to share data between activities。
但是,在Android框架中你应该非常小心的一件事是通过Singletons传递Context
个项目。与您的应用程序本身不同,系统会因各种原因(显式活动破坏,内存不足或用户离开应用程序而)回收活动和碎片。但是,保持对这些上下文之一的引用的Singleton不会被销毁,这意味着您只是创建了一个可能的内存泄漏,因为该项目已不再用于系统并且已经创建了一个新项目。解决Context泄漏的一种方法是使用ApplicationContext
,这是整个过程的Context,只有在整个过程(以及您的Singleton)被回收时才会被回收。在Singleton中使用ApplicationContext并没有什么坏处,尽管通常还有其他方法可以获得对Context的引用。
答案 1 :(得分:0)
是的,你应该避免在这种方法中传递信息,因为你很容易导致内存泄漏。为了在活动之间传递信息,你可以使用Intent附加功能。你应该在意图中加入额外的东西,从下一个活动中你得到额外的。 示例:How do I get extra data from intent on Android?