嗨,我在这里做一个应用程序。我正在使用全局类变量。它运行良好,但如果我使用更多的全局类变量,我有时会得到内存异常。
我试过了:
public class SecondClass extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText("Global String : " + GlobalClass.myVal);
}
}
class GlobalClass extends Application {
static String myVal;
}
这是否正确?
答案 0 :(得分:3)
你可以这样使用
public class GlobalVar {
public int getMyVar() {
return myVar;
}
public void setMyVar(int myVar) {
this.myVar = myVar;
}
private int myVar = 0;
private static GlobalVar instance;
static {
instance = new GlobalVar();
}
private GlobalVar() {
}
public static GlobalVar getInstance() {
return GlobalVar.instance;
}
}
然后你可以像
一样打电话GlobalVar.getInstance().setMyVar(int);
答案 1 :(得分:3)
首先,您不需要静态变量来在Application Class中声明全局变量,
所以将您的代码更改为:
class GlobalClass extends Application {
public String myVal;
}
然后,当您需要访问此数据时,请通过以下方式获取Application对象:
GlobalClass global=(GlobalClass)context.getApplication();
global.myVal="anything";
答案 2 :(得分:1)
您也可以使用全局变量活动类。例如
public class SecondClass extends Activity {
String S1,S2,S3;
EditText edt1,Edt2,Edt3;
Button btn1,btn2,btn3;
//like this wat Declare all variable you want to use in your Present Activity Class
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
edt1= (EditText)findViewById(R.id.tv);
}
}
答案 3 :(得分:0)
查看帖子Singletons vs. Application Context in Android?
论坛中有很多关于Singletons vs Application对象的讨论。 我个人倾向于使用属性的Application对象。如果你不想留在内存中,很多对象使用LruCache(兼容包中有一个v11前实现)来降低你的内存需求。
考虑到使用Singletons会比使用Application对象吃掉相同数量的内存,所有对象都将保留在内存中,直到你释放它们(删除对它们的任何引用并让GC从内存中清除它们)。 / p>