如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context
每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。
方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。
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();
...
}
}
然后再manifest中添加应用:
<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ClickableListItemActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
说明:
(1)Application对象只有在应用程序中所有Activity都destroy时才会destrory,所有我们可以在任何一个Activity中访问它;
(2)为什么我们不能使用static 变量来存放全局变量呢?
public class DataStoreClass {
private static int globalVariable=1;
public static int getGlobalVariable() {
return globalVariable;
}
public static void setGlobalVariable(int newGlobalVariable) {
globalVariable = newGlobalVariable;
}
}
通过这种方式,DataStoreClass类可能会像Activity一样在某些时候被android系统强行销毁。所以在应用程序运行期间,DataStoreClass的值可能会丢失,或得到一些您不想要的值。
分享到:
相关推荐
在C++中,声明一个类,并且定义一个全局变量,练习全局变量的使用。注意全局变量的使用技巧和方法。
第一:使用extern關鍵字聲明(不推薦,破壞了封裝性) 第二:新建一個類,存放全局的變量,函數 第一:使用extern關鍵字聲明(不推薦,破壞了封裝性) 第二
C语言中如何使用全局变量简单示例,多文件.c中如何使用全局变量 关注“M2嵌入式”公众号,回复资源免费下载
flask中jinja2使用全局变量
在多文件项目中使用全局变量进行参数传递的方法总结
当时想到的就是使用全局变量,在 app.js 中定义好全局变量,点击组件页面时就修改全局变量的值,父页面同样使用全局变量的值,这样一来就可以动态打开/关闭弹出层且传递值了。 下面先看看 app.js 中怎么定义的: ...
Android用Application设置全局变量以及使用 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅...
精彩编程与编程技巧-避免使用全局变量 ...
Python 定义了全局变量的特性,使用global 关键字修饰 global key_word 但是他的一大缺陷就是只能本module 中也就是本文件中使用,跳出这个module就不行。 try 1: 使用一个更宏观的思路,全局变量就用全局加载的...
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。
NULL 博文链接:https://toknowme.iteye.com/blog/2212529
VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量...
labview功能性全局变量的详细使用,避免局部变量的数据争抢
全局变量、局部变量、静态全局变量、静态局部变量的区别
使用全局变量 VI 实现动态数据从一个 VI 传送到别一个 VI 中。当两个 VI 同时运行时,观察对比两个 VI 的波形图,调节第一个 VI 的滑动 杆,再观察对比两边的波形,最后,按下第一个 VI 里的停止按钮时,第二个 VI ...
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊...
本篇文章是对在PHP中使用全局变量的几种方法进行了详细的分析介绍,需要的朋友参考下
VB 全局变量举例 VB 全局变量举例 VB 全局变量举例
Spring MVC配置Freemarker全局变量,实现应用全路径