使用Application变量
来源:互联网 发布:条件筛选数据计数 编辑:程序博客网 时间:2024/04/30 13:50
如何在多个Activity中共享数据?Android中有Application变量吗?听起来象是在说Asp(Asp也有所谓的Application变量)。
如果你想在多个Activity之间共享一组电话号码,你可以用xml资源文件,也可以用SharedPreferences。
但Application变量其实不仅仅是变量,他其实是对象,也就是说可以在应用程序的多个Activity间共用代码(方法)。
例如,我有一个获取本机号码的方法,想让所有的类中都能方便地调用它。你也许会说,创建一个工具类好了。没错,我准备把它封装在单独的类里。
但仅仅这样还不够。因为普通的类你怎么获得一个Context?AndroidSDK中有大量方便的方法,都需要Context来调用,比如 getSystemService方法(这个例子里面就要用到),又比如 getSharedPreferences方法,经常用来获取应用程序共享数据,又比如getString方法,我们用来读取xml资源中定义的字符串,等等。
我们平时使用 Context的时候很方便,那是因为Activity已经为我们准备好了。
而作为工具类,通常不需要界面,因此它不可能继承自Activity。
你又会说,我们可以通过方法参数传递一个Context进去。就目前为止,我们所知道的Context只有Activity和它的子类。但调用我们的工具类的很可能根本不是一个Activity子类,它又怎么获得一个Context来传递给参数呢?同样问题又出现了,我们依然没有解决它。
那么我们就束手待毙了吗?
我们没有其他更多的选择,只能使用Application变量。
1、AndroidManifest.xml
又是AndroidManifest.xml。这东东可以说是太重要了,我们随时都需要用到它。
首先,在<application>标签中申明属性:
android:name="ydtf.pm.Utils"
我们定义了一个Application变量ydtf.pm.Utils。说是变量,其实更象是一个类名。没错,它就是我们接下来要实现的工具类。
说它是变量,是因为这样声明了之后Utils类会获得一个本应用程序的Context引用。
这有点象Spring IoC(依赖注入)?或者是AOP(象AOP一样给Utils对象增加一个属性)?
我不知道怎么形容它,反正你看接下来的代码就知道了。
2、Utils.java
public class Utils extends Application {
private static Utils instance;
private SharedPreferences settings;
private Context ctx;
public static UtilsgetInstance(){
return instance;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
instance = this;
ctx=this.getBaseContext();
}
// 获取sim卡手机号 <uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />
public StringgetLocalTelNo(){
// 取得手机服务
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getLine1Number();
}
}
代码很简单的,只需要注意那么几点。
1、继承Application
既然是Application变量,当然要继承自Application,因为<application>标签规定android:name 属性中的东西必须是Application子类。此外,Application象Activity一样,提供了获得“免费”Context的方法getBaseContext()。
2、覆盖onCreate()方法
onCreate()方法实际上是Application的初始化方法,当构造方法被调用之后接着被调用。因此我们需要在这里获得必要的东西,比如Context。于是:
ctx=this.getBaseContext();
3、使用Context
这样在接下来的实例方法中,我们就有“免费”的Context使用了,就如getLocalTelNo所做的:
ctx.getSystemService(Context.TELEPHONY_SERVICE);
4、在其他的类中使用Utils:
跟一般的类一样使用它:
String number=Utils.getInstance().getLocalTelNo();
- 使用Application变量
- 使用Application变量
- 在.NET中使用静态变量来代替Application变量
- Android中用Application类实现全局数据变量的使用
- Android中用Application类实现全局数据变量的使用
- Android中用Application类实现全局数据变量的使用
- Android中用Application类实现全局数据变量的使用
- 如何设置application 变量
- 用Application传递变量
- Application.mk的变量
- Application.mk常用变量
- application共享变量
- application 使用
- Application使用
- 用Application保存变量 等
- 利用Application 存储全变量
- 自定义Application使用示例——几个Activity共同操作某个变量
- 数据共享之Android中用Application类实现全局数据变量的使用
- 现代五子棋
- ewebeditor不登陆后台也有机会拿shell
- WinCE USB驱动CDevice::EnterOperationalState函数相关
- 初识AutoHotKey
- 强大的计算机工作面试笔试题目...
- 使用Application变量
- fodero9 nfs mini6410
- 一步步学汇编(六)内存寻址方式
- 一步步学汇编(六)内存寻址方式
- 开始学习C#和visual studio 2008
- AMBA总线新一代标准AXI分析和应用
- oracle substr()函数
- 几个c#题行,你能做出来吗。
- SSH 配置文件