技术开发 频道

关于Android程序使用全局变量

  【IT168 技术】前阵子参加了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的思想,因此也能解决这个问题。

0
相关文章