在Android中使用Application保存全局变量

最近在项目中,遇到了 Application 这个类,开始不知道有什么用,经过学习后才知道它的用途也蛮大的,举个例子,如果想在整个应用中使用全局变量,在 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 类的时候,只要在 AndroidManifest.xml 中的 <application> 标签中 name 应用自己定义的类就行了,这样做的结果是:当你的应用程序或者包所在的进程创建的时候,这个类就会被实例化。


怎么使用它呢?首先需要重写 Application,主要重写里面的 onCreate() 方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。启动 Application 时,系统会创建一个 PID,即进程 ID,所有的 Activity 就会在此进程上运行。那么我们在 Application 创建的时候初始化全局变量,同一个应用的所有 Activity 都可以取到这些全局变量的值,换句话说,我们在某一个 Activity 中改变了这些全局变量的值,那么在同一个应用的其他Activity 中值就会改变。


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

自定义的 QApp:

import android.app.Application;  
  
public class QApp extends Application{  
  
    private String label;  
      
    public String getLabel(){  
        return ylabel;  
    }  
  
    public void setLabel(String s){  
        this.label = s;  
    }  
  
    @Override  
    public void onCreate() {  
        // TODO Auto-generated method stub  
        super.onCreate();  
        setLabel("Hello, Qing!");   //初始化全局变量  
    }  
  
}  

MainActivity:
import android.app.Activity;    
import android.content.Intent;    
import android.os.Bundle;    
import android.util.Log;  
  
public class MainActivity extends Activity {  
  
    private QApp qApp;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
  
        qApp = (QApp) getApplication();  // 获得自定义的应用程序 QApp  
        Log.i("QLog", "InitLabel:" + qApp.getLabel());  // 将我们放到进程中的全局变量拿出来,看是不是我们曾经设置的值  
          
        qApp.setLabel("Set Label");  //修改一下  
        Log.i("QLog", "ChangeLabel:" + qApp.getLabel());  // 看下,这个值改变了没有  
  
        Intent intent = new Intent();  // 再看一下在另一个 Activity中 是取到初始化的值,还是取到修改后的值  
        intent.setClass(this, otherActivity.class);  
        startActivity(intent);  
    }  
  
}  

OtherActivity:

import android.app.Activity;    
import android.os.Bundle;    
import android.util.Log;  
  
public class OtherActivity extends Activity{  
  
    private QApp qApp;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
  
        qApp = (QApp) getApplication();  // 获得自定义的应用程序 QApp  
        Log.i("QLog", "OhterActivity receive the Label:" + qApp.getLabel());  // 查看变量值是否修改了  
    }  
  
}  

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

<?xml version="1.0" encoding="utf-8"?>    
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.android.test"  
    android:versionCode="1"  
    android:versionName="1.0">  
  
    <!-- 在这里,将默认的 Application 设置成自己做的 QApp-->  
    <application android:name=".QApp"  
        android:icon="@drawable/icon"  
        android:label="@string/app_name"  
        >  
        <activity android:name=".MainActivity"  
            android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
  
        <activity android:name=".OtherActivity">  
        </activity>  
    </application>  
</manifest>  


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值