关于android中是否可以使用全局变量,当然可以。做Java的人肯定都用过全局变量了,使用方法无非是定义一个静态变量,public类型,这样在其他类中就可以直接调用了,android中也可以这样使用。

但是,android中这样使用全局变量是不是最符合android的架构呢,在国外的论坛里找到了下面的解决办法:

ThemoregeneralproblemyouareencounteringishowtosavestateacrossseveralActivitiesandallpartsofyourapplication.Astaticvariable(forinstance,asingleton)isacommonJavawayofachievingthis.Ihavefoundhowever,thatamoreelegantwayinAndroidistoassociateyourstatewiththeApplicationcontext.

--如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Applicationcontext。

Asyouknow,eachActivityisalsoaContext,whichisinformationaboutitsexecutionenvironmentinthebroadestsense.Yourapplicationalsohasacontext,andAndroidguaranteesthatitwillexistasasingleinstanceacrossyourapplication.
--每个Activity都是Context,其包含了其运行时的一些状态,android保证了其是singleinstance的。

Thewaytodothisistocreateyourownsubclassofandroid.app.Application,andthenspecifythatclassintheapplicationtaginyourmanifest.NowAndroidwillautomaticallycreateaninstanceofthatclassandmakeitavailableforyourentireapplication.YoucanaccessitfromanycontextusingtheContext.getApplicationContext()method(ActivityalsoprovidesamethodgetApplication()whichhastheexactsameeffect):
--方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。

下面看一下Demo:

[java] view plain copy
  1. classMyAppextendsApplication{
  2. privateStringmyState;
  3. publicStringgetState(){
  4. returnmyState;
  5. }
  6. publicvoidsetState(Strings){
  7. myState=s;
  8. }
  9. }
  10. classBlahextendsActivity{
  11. @Override
  12. publicvoidonCreate(Bundleb){
  13. ...
  14. MyAppappState=((MyApp)getApplicationContext());
  15. Stringstate=appState.getState();
  16. ...
  17. }
  18. }


Thishasessentiallythesameeffectasusingastaticvariableorsingleton,butintegratesquitewellintotheexistingAndroidframework.Notethatthiswillnotworkacrossprocesses(shouldyourappbeoneoftherareonesthathasmultipleprocesses).
--这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。

使用这种方法的话需要在AndroidManifest.xml中配置一下:

<applicationandroid:name=".MyApp"android:icon="@drawable/icon"android:label="@string/app_name">

更多相关文章

  1. Android(安卓)中自定义View(四)
  2. Android(安卓)NDK 使用第一步,编译c文件,声明jni并调用。
  3. Android(安卓)Jni代码示例讲解
  4. android ndk 开发之 在 应用程序中使用 jni
  5. android:shape的使用
  6. android 中的全局变量问题
  7. Android开发人员的10大抱怨
  8. Android小项目合集(经典教程)包含十五个Android开发应用实例
  9. Android(安卓)打造编译时注解解析框架 这只是一个开始

随机推荐

  1. Java8 Lambda 表达式和流操作如何让你的
  2. 程序员小猪队友行为大赏
  3. 没用过这些IDEA插件?怪不得写代码头疼
  4. 最近 5 年 133 个 Java 面试问题列表(上)
  5. 看完这篇,别人的开源项目结构应该能看懂了
  6. 做完小程序项目、老板给我加了6k薪资~
  7. Java 8 Lambda 表达式和流操作如何让你的
  8. Java 日志记录的 5 条规则
  9. 该如何以正确的姿势插入SVG Sprites?
  10. 关于 ArrayList 的 5 道面试题