关于Android程序使用全局变量

前阵子参加了Google Android开发大赛,在我们组的程序中需要使用一个全局变量,这个变量主要用于存储通过I/O读入的xml文件流,通过kxml2解析器进行dom解析,为了不用每次查询该xml文件(因为i/o操作的代价比较大),所以使用全局InputStream来存储,但是因为是在Android平台上进行操作,所以与在PC上的操作方法有所不同,当时采用的方法如下:

1.首先将xml文件放在Android系统的asset文件夹下

2.在程序启动的Activity中,在onCreate中插入读取xml数据流,然后将这个流InputStream传给存储全局变量的类XmlTool中的静态方法setValue(InputStream is)

XmlTool的构造如下:

XmlTool{

       public static KXml2  kxml2;

    public static void setValue(InputStream is){

            if(kxml2=null)

                 kxml2 = new KXml2(is);

      }

}

在XmlTool中通过KXml2的构造函数public KXml2(InputStream is)去设置用于解析的parser,doc和root,这样问题就解决了,当时多亏了Jake和队友的帮助,因为已经是提交的前一天了,所以挺着急的的当时。



后来在网上看了另一种方法,将自己的理解写出来:

public class MyApp extends Application {
private Integer[] state;
public Integer[] getState() {
return state;
}
public void setState(Integer[] state) {
this.state = state;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
setState(we);
}//一定要在onCreate方法里给变量赋值
public Integer[] we=new Integer[]{
    R.drawable.b_0,R.drawable.b_1,R.drawable.b_2,
    R.drawable.b_3,R.drawable.b_4,R.drawable.b_5
};

}
在所需要的activity中使用
MyApp appState = (MyApp)getApplicationContext();
Integer[] we = appState.getState();
来获取,最后一步别忘了在manifest中的application标签中添加 android:name=".MyApp"(这儿不是新建<application></application>),注意这里继承的是Application,当时我也想过用一个Activity来实现,但是jake的建议是如果是Activity那么最好在前台显示,这个显然不太合理,而这里使用Application不会有这个问题,同样我们可以在onCreate的时候将I/O操作加进去,然后使用一个非static的KXml2的对象进行xml文件的解析,这里不会每次创建,因为是交由系统注入的,有点类似于Spring的思想,因此也能解决这个问题。

你可能感兴趣的:(spring,xml,android,Google)