安卓的全局变量

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

举个例子,如果想在整个应用中使用全局变量,在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  <!-- 在这里,将默认的Application设置成自己做的YApp-->
2     <application android:name="YApp"
3         android:icon="@drawable/icon"
4         android:label="@string/app_name"
5         >  

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

时间: 2024-08-06 11:36:02

安卓的全局变量的相关文章

安卓 Activity 给 popupwindow 传值

功能简单介绍:在Activity页面中点击某个按钮,弹出自定义popupwindow页面,同时将Activity中的电话号码字符串传递给popupwindow页面.再点击popupwindow页面中的按键直接跳转到安卓拨号页面,同时电话号码也在页面上. 声明:值传递其实用的是安卓的全局变量. 全局变量类中的代码如下: package com.cn.gordon.exhibition.walk.application; import android.app.Application; public

安卓中使用全局变量getApplicationContext

定义一个用户信息类 /**Title: 用户登录信息 * @author Java Development Group * @version 3.0 */ public class gf_ControlUserinfo extends Application { ...省略 } 在中配置全局声明 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" androi

安卓声明一个全局变量,每个activity都可以调用和修改

当需要一个变量,每个activity都能够调用和修改的时候,可以先创建一个类,让他继承Application,并实现一些方法就行了,下面的例子:App打开,文本显示全局变量的初始值,点击按钮,文本值改变,并更新显示. 首先创建一个类:Myapplication.java package com.example.application; import android.app.Application; public class Myapplication extends Application {

php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restful api 请明白一点,这个只是设计指导思想,也就是设计风格 ,比如你需要遵循这些原则 原则条件REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful.Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的.从客户端到服务

程序员带你学习安卓开发,十天快速入门-开发工具配置学习

上次课程:.Net程序员学习Android开发-第一课 讲到,.Net程序员学习Android开发的必要性以及对安卓大环境的相关介绍. 其中看到有网友评论,称,搞C#的去搞安卓,还怪自己的移动平台不给力.有的人说,学习.Net就学.Net学习什么安卓.这时的我首先想到了,固步自封的大清朝.当然并不是对这部分人排斥.只能说是想法不一致,认知略有不同,也没有错与对,我只是想把我自己的想法表达出来,期望与您产生共鸣.的确迄今为止,我仍然认为C#是当今我见过的最好的语言.设计规范语法总使我赶到兴奋其优美

使用ApplicationContext作为全局变量引用的缺陷

在上一篇博客中,我讲了初次开发安卓必须知道的 6件事(6 THINGS I WISH I KNEW BEFORE I WROTE MY FIRST ANDROID APP).其中一条就是:不要有一个Context的静态引用.我这么警告的原因是一个Context的静态引用可能引发内存泄露.但是一位读者指出:一个Application Context的静态引用不会造成内存泄露,因为只要程序还在运行,Application Context的生命周期就不会结束.我则反驳到:技术上来说,你可以拥有一个Ap

FLEX AIR 读写安卓本地文件

1.  目标: 将字节流图片保存在安卓本地路径,如 "/data/mypppd/"下, file = File.documentsDirectory.resolvePath("/data/mypppd/"+countPoint+".jpg"); var fileStream:FileStream = new FileStream(); fileStream.open(file, FileMode.WRITE); fileStream.writeB

若水新闻安卓客户端笔记

Lesson3 - 设计新闻分类导航UI arrays.xml定义一个数组String[] categoryArray = getResources().getGridView category = new GridView(this);category.setNumColumns(GridView.AUTO_FIT);category.setGravity(Gravity.CENTER); px转化为dip格式使用DensityUtil.java工具类 AdapterSimpleAdapter

安卓中实现界面数据懒加载

大家在使用手机新闻客户端的时候就会有一个发现,大多数的新闻客户端都会把新闻分类,诸如头条.娱乐.体育.科技等等,如何实现这种界面的呢?这个实现起来其实很简单,就是在一个Fragment中实现多个ViewPage的切换,再在ViewPage的上面放一个TabLayout,关联起来就可以实现联动效果.如果大家感觉不太明了的话,以后我可以专门写一篇关于Fragment中放入多个ViewPage的博客,今天,我主要介绍的是怎样实现界面即Fragment的懒加载.那么,大家就会奇怪了既然是加载界面直接加载