java application变量_使用Application变量

如何在多个Activity中共享数据?Android中有Application变量吗?听起来象是在说Asp(Asp也有所谓的Application变量)。

如果你想在多个Activity之间共享一组电话号码,你可以用xml资源文件,也可以用SharedPreferences。

但Application变量其实不仅仅是变量,他其实是对象,也就是说可以在应用程序的多个Activity间共用代码(方法)。

例如,我有一个获取本机号码的方法,想让所有的类中都能方便地调用它。你也许会说,创建一个工具类好了。没错,我准备把它封装在单独的类里。

但仅仅这样还不够。因为普通的类你怎么获得一个Context?Android

SDK中有大量方便的方法,都需要Context来调用,比如

getSystemService

方法(这个例子里面就要用到),又比如

getSharedPreferences

方法,经常用来获取应用程序共享数据,又比如

getString

方法,我们用来读取xml资源中定义的字符串,等等。

我们平时使用Context的时候很方便,那是因为Activity已经为我们准备好了。

而作为工具类,通常不需要界面,因此它不可能继承自Activity。

你又会说,我们可以通过方法参数传递一个Context进去。就目前为止,我们所知道的Context只有Activity和它的子类。但调用我们的工具类的很可能根本不是一个Activity子类,它又怎么获得一个Context来传递给参数呢?同样问题又出现了,我们依然没有解决它。

那么我们就束手待毙了吗?

我们没有其他更多的选择,只能使用Application变量。

1、AndroidManifest.xml

又是AndroidManifest.xml。这东东可以说是太重要了,我们随时都需要用到它。

首先,在标签中申明属性:

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

Utils

getInstance(){

return

instance

;

}

@Override

public

void

onCreate() {

//

TODO

Auto-generated method stub

super

.onCreate();

instance

=

this

;

ctx

=

this

.getBaseContext();

}

//

获取

sim

卡手机号

android:name="android.permission.READ_PHONE_STATE" />

public

String

getLocalTelNo(){

//

取得手机服务

TelephonyManager tm = (TelephonyManager)

ctx

.getSystemService(Context.

TELEPHONY_SERVICE

);

return

tm.getLine1Number();

}

}

代码很简单的,只需要注意那么几点。

1、继承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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值