`

在Android程序中使用全局变量(转)

阅读更多

 

Android中如何使用全局变量--Application context ()

 

关于android中是否可以使用全局变量,当然可以。做Java的人肯定都用过全局变量了,使用方法无非是定义一个静态变量,public类型,这样在其他类中就可以直接调用了,android中也可以这样使用。

但是,android中这样使用全局变量是不是最符合android的架构呢,在国外的论坛里找到了下面的解决办法:

The more general problem you are encountering is how to save stateacross several Activities and all parts of your application. A staticvariable (for instance, a singleton) is a common Java way of achievingthis. I have found however, that a more elegant way in Android is toassociate your state with the Application context.

--如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context

As you know, each Activity is also a Context, which is informationabout its execution environment in the broadest sense. Your applicationalso has a context, and Android guarantees that it will exist as asingle instance across your application.
--每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。

The way to do this is to create your own subclass of android.app.Application,and then specify that class in the application tag in your manifest.Now Android will automatically create an instance of that class andmake it available for your entire application. You can access it fromany context using the Context.getApplicationContext() method (Activityalso provides a method getApplication() which has the exact sameeffect):
--方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。

 

下面看一下Demo

 

class MyApp extends Application {
	private String myState;
	public String getState(){
		return myState;
	}
	public void setState(String s){
		myState = s;
	}
}
class Blah extends Activity {

	@Override
	public void onCreate(Bundle b){
		...
		MyApp appState = ((MyApp)getApplicationContext());
		String state = appState.getState();
		...
	}
}
 

This has essentially the same effect as using a static variable orsingleton, but integrates quite well into the existing Androidframework. Note that this will not work across processes (should yourapp be one of the rare ones that has multiple processes).
--这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。

 

使用这种方法的话需要在 AndroidManifest.xml中配置一下:

<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@string/app_name">

 

 

分享到:
评论

相关推荐

    Android通过全局变量传递数据

    在Activity之间数据传递中还有一种比较实用的方式 就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何...

    Android编程中全局变量问题分析

    现在每天都在忙,而且一忙起来,就把写笔记的事情放在了后面,最近在写程序的时候,突然要使用全局变量,就按照以前的方式,写了一个类,然后把变量都声明为静态变量,然后做为全局变量使用,但是在进行Activity切换...

    浅谈Android中关于静态变量(static)的使用问题

    在这里记录下Android中使用static的一些问题。 静态变量的生命周期遵守Java的设计。静态变量在类被load的时候分配内存,并存在于方法区。当类被卸载时,静态变量被销毁。在PC机的客户端程序中,一个类被加载和卸载,...

    Android 中两个Activity 之间的传值问题

    但是我们知道,在Java中全局静态变量(java中没有全局变量这一个概念,但是java提供了public static关键字来实现一些类似于全局变量的关键字)都是在程序加载时就放人到内存中,它是存储在方法区里的。如果程序不...

    精通ANDROID 3(中文版)1/2

    23.5.1 在Android搜索中使用操作键  23.5.2 使用应用程序特定的搜索上下文  23.6 资源  23.7 对平板电脑的意义  23.8 小结  第24章 文本到语音转换  24.1 Android中的文本到语音转换  24.2 使用语段...

    基于Android系统的BroadcastReceiver全局广播消息通信.zip

    当 Android 应用程序被编译,会自动生成一个 R 类,其中包含了所有 res/ 目录下资源的 ID,如布局文件,资源文件,图片(values下所有文件)的ID等。在需要使用这些资源的时候就可以使用R类来进行调用。这些可供调用...

    精通Android 3 (中文版)2/2

    23.5.1 在Android搜索中使用操作键  23.5.2 使用应用程序特定的搜索上下文  23.6 资源  23.7 对平板电脑的意义  23.8 小结  第24章 文本到语音转换  24.1 Android中的文本到语音转换  24.2 使用语段...

    pro_android_cpp_with_the_ndk.pdf

    4.4.1 全局变量 4.4.2 常量 4.4.3 只读变量 4.4.4 枚举 4.4.5 结构体 4.4.6 指针 4.5 封装C++代码 4.5.1 指针、引用和值 4.5.2 默认参数 4.5.3 重载函数 4.5.4 类 4.6 异常处理 4.7 内存管理 4.8 从原生代码中调用...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    7.3.1 在原生代码中使用POSIX线程 168 7.3.2 用pthread_create创建线程 168 7.3.3 更新示例应用程序以使用POSIX线程 169 7.3.4 执行POSIX线程示例 174 7.4 从POSIX线程返回结果 174 7.5 POSIX线程同步 176 ...

    Android程序优化总结

    尽量使用标准库函数和公共函数不要随意定义全局变量,尽量使用局部变量。使用括号可以避免二意性可读性第一,效率第二源程序文件,都有文件头说明每个函数,都有函数头说明常量定义和变量定义和引用时,要添加注释...

    双鱼林安卓Android代码生成器 v2.0.zip

    com.mobileclient.app:保存应用程序类,全局变量可以放到这里,应用程序中未处理的异常可以在此被捕获到日志文件。 res/layout:各种界面布局文件! res/drawable-mdpi:程序界面中用到的图片资源文件!

    Android Activity 完全结束并退出程序的实例

    记得当时自己写的第一个比较完整的项目的时候就遇上了这个问题,由于对Activity的生命周期了解不够,又使用了TabActivity使得层次关系比较复杂,在程序中添加的“退出”菜单项经常无法完全退出,之后网上各种搜索,...

    react-native-cross-geolocation:React Native Geolocation兼容模块,该模块在Android设备中使用新的Google Location API

    从v1.1.0开始,react-native-cross-geolocation支持全局变量playServicesLocationVersion以指定要使用的“ com.google.android.gms:play-services-location”的版本。 默认为16.0.0 配置和权限 本节仅适用于使用...

    myspringc编程工具

    SpringC支持的C与普通的C非常类似,程序从main开始,支持全局变量和局部变量,支持各种数据类型和常用的控制流。因此它是大家方便的掌上编程工具,它没有复杂、庞大的编程环境,只要你了解一点C或java,只需要一部...

    Android实现为Tab添加Menu的方法

    本文实例讲述了Android实现为Tab添加Menu的方法。...如果每个Tab需要有不同的Menu,可以为TabHost添加一个OnTabChangedListener,在这个Listener中对一个全局变量(比如intMenuNumber)进行修改,这样在On

    ANDROID 完美退出APP的实例代码

    大家都知道 Android 的 Activity 是存着历史栈的,比如...使用全局变量。对了,第一个想到的就是继承 Application,代码入下: 代码如下:public class AgentApplication extends Application { private List&lt;Activi

    myspringc简明用户手册

    SpringC支持的C与普通的C非常类似,程序从main开始,支持全局变量和局部变量,支持各种数据类型和常用的控制流。因此它是大家方便的掌上编程工具,它没有复杂、庞大的编程环境,只要你了解一点C或java,只需要一部...

Global site tag (gtag.js) - Google Analytics