博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓的全局变量
阅读量:5093 次
发布时间:2019-06-13

本文共 2352 字,大约阅读时间需要 7 分钟。

      因为要用到记录登录名,然后在各个界面之间进行使用,开始的时候,我们使用Intent进行界面之间的传值,但是效果不是很好,在网上看到一个这样的帖子挺不错,打算记录过来。(转载从)

      举个例子,如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。

      我们先看看一下这段说明:

      Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is
created.
     
意思是:application类是一个基类,这个基类的作用是为了获取整个应用程序的状态。你可以自己继承或实现这个类,当你要使用自己拓展的application类的时候,只要在anifest.xml中的<application>标签中name应用自己定义的类就行了,这样做的结果是:当你的应用程序或者包所在的进程创建的时候,这个类就会被实例化。怎么使用它呢?首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。

      启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

      下面举个例子详细介绍一下应用步骤:

代码如下:

1 package com.jikexuyuan.usingslidingmenu; 2  3  4 import android.app.Application;   5  6 public class Yapp extends Application{   7    8     private String ylabel ;       9     public String getLabel(){  10         return ylabel;  11     }     12     public void setLabel(String s){  13         this.ylabel = s;  14     }  15   16     @Override  17     public void onCreate() {  18         // TODO Auto-generated method stub  19         super.onCreate();  20         setLabel("Sno"); //初始化全局变量         21     }     22 }

取出,或者对其重新重新赋值:

1 private Yapp yApp; 2     /** Called when the activity is first created. */ 3     @Override 4     public void onCreate(Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         requestWindowFeature(Window.FEATURE_NO_TITLE);     7         setContentView(R.layout.activity_login); 8         9         10         yApp = (Yapp) getApplication(); //获得自定义的应用程序YApp  11         Log.i("YAnGl", "InitLabel:"+yApp.getLabel());   //将我们放到进程中的全局变量拿出来,看是不是我们曾经设置的值

然后再修改配置文件ApplicationManifest.xml,将要运行的应用程序YApp加进去:

1  
2

这样的话,在每个界面上都可以用这个值了。

 补充说明:

       由于今天编程序时候遇到了问题,当到第二个界面或者是获取它的时候,总会发现获取不到,后来发现少了一句代码。

 当使用的时候代码如下

1 yApp = (YApp) getApplication();  //获得自定义的应用程序MyApp  2             Log.i("YAnG", "OhterActivity receive the Label:"+yApp.getLabel()); //查看变量值是否修改

 

转载于:https://www.cnblogs.com/cnyulei/p/5572791.html

你可能感兴趣的文章
arguments的类型是Array吗?
查看>>
分享一个安全实现JSONP跨域的插件
查看>>
团队展示与选题
查看>>
[译]Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
查看>>
第六百二十二天 how can I 坚持
查看>>
51nod 1833 状压dp加一点图论
查看>>
Java并发:Callable、Future和FutureTask
查看>>
扩展方法/对象与集合初始化器
查看>>
java责任链设计模式
查看>>
js 规范
查看>>
MORMOT的数据序列
查看>>
POJ 3348
查看>>
问题记录 - 调试程序时桌面程序可以运行,却不自动生成桌面快捷方式
查看>>
hdu 1874 畅通project续
查看>>
Tomcat Session Clustering
查看>>
HTML和CSS代码片段快速编写方式(Emmet Documentation)
查看>>
使用shadow dom封装web组件
查看>>
static_cast、dynamic_cast、const_cast和reinterpret_cast总结(转)
查看>>
luoguP1594 护卫队
查看>>
redirect()重新定向·
查看>>