`
moor212
  • 浏览: 176119 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用全局变量

 
阅读更多

如想在整个应用中使用,在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++中类使用全局变量

    全局变量的使用有其优点,如共享数据和简化代码,但也存在一些潜在的问题,如数据安全和命名冲突。以下是对标题和描述中所述知识点的详细解释: 首先,让我们看看示例代码中如何在类中使用全局变量。在这个例子中,...

    QT 使用全局变量的方法 - 郭小郭的专栏 - CSDN博客1

    现在,`Temp::x`可以作为一个全局变量使用,通过`Temp::x`来访问它。 ### 考虑因素和最佳实践 1. **封装**:尽量避免全局变量,因为它们可以使代码的依赖关系变得模糊,导致难以理解和维护。 2. **内存管理**:...

    在C/C++项目中使用全局变量的方法

    ### 在C/C++项目中使用全局变量的方法 #### 概述 在开发C/C++项目时,有时需要在多个源文件之间共享数据或状态信息。全局变量作为一种简单且直观的数据共享方式,在某些场景下非常实用。然而,不当的使用全局变量...

    C语言中如何使用全局变量示例

    - 如果必须使用全局变量,考虑使用静态全局变量(仅在当前文件可见),以限制其作用域。 总之,虽然全局变量在某些情况下提供了一定的便利性,但应谨慎使用,以免引入潜在的问题。在编写C语言程序时,优先考虑使用...

    flask中jinja2使用全局变量

    flask中jinja2使用全局变量

    微信小程序全局变量改变监听的实现方法

    当时想到的就是使用全局变量,在 app.js 中定义好全局变量,点击组件页面时就修改全局变量的值,父页面同样使用全局变量的值,这样一来就可以动态打开/关闭弹出层且传递值了。 下面先看看 app.js 中怎么定义的: ...

    全局变量的使用

    Android用Application设置全局变量以及使用 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅...

    易语言源码易语言汇编设置全局变量源码.rar

    1. 定义全局变量:在易语言中,可以使用“定义”关键字来声明全局变量,如“定义 整数型 全局变量A”,这会在程序开始时自动分配内存空间并初始化为默认值。 2. 使用全局变量:在程序的任何地方,只要正确引用全局...

    VB 全局变量举例

    下面将详细解释如何在VB中定义和使用全局变量,并给出一些实际的例子。 首先,我们来了解如何声明全局变量。在VB中,全局变量通常在标准模块(Module)的顶部声明,这样它们就可以在程序的任何地方被访问。声明全局...

    精彩编程与编程技巧-避免使用全局变量...

    精彩编程与编程技巧-避免使用全局变量 ...

    采用全局变量方式实现多线程的通信

    以下是一个简单的例子,展示了如何使用全局变量和`CSingleLock`进行线程间通信: ```cpp // 全局变量 CRITICAL_SECTION g_cs; int g_sharedData; // 初始化临界区 void InitCriticalSection() { ...

    VC中的全局变量.doc

    全局变量在VC++编程中是一种常见但需谨慎使用的数据存储方式。它们可以在程序的不同函数或模块之间共享,不受函数调用的影响,具有全局可见性。然而,过度依赖全局变量可能会导致代码可读性下降、调试困难以及潜在的...

    labview功能性全局变量的详细使用

    本篇将详细介绍LabVIEW功能性全局变量的使用方法及其优势。 1. **全局变量的概念** 全局变量是一种在程序的不同部分都能访问的变量,与局部变量相比,它们在整个程序的生命周期内保持其值。在LabVIEW中,全局变量...

    labview局部变量与全局变量

    `Global Variable.vi`可能展示了如何在多个VI之间创建和使用全局变量,以及如何管理全局变量的生命周期和数据流。 **课后练习.docx 和 局部变量与全局变量.pdf** `课后练习.docx`可能是配套的练习题目,旨在帮助...

    使用全局变量带来的问题.sh

    使用全局变量带来的问题

    全局变量在对话框中的使用

    在VC++ 6.0中,MFC(Microsoft Foundation Classes)库提供了丰富的对话框和控件支持,使得全局变量的使用更加灵活。 首先,我们来看第一个实例:定义全局指针。在MFC中,对话框通常由CDialog类的派生类表示,而...

    定义全局变量 变量 全局

    在MFC(Microsoft Foundation Classes)框架中,全局变量和函数的使用与标准C++有所不同,因为MFC工程通常由多个文件组成,需要一种方法来在这些文件之间共享数据和功能。这里将介绍两种在MFC工程中定义全局变量和...

    JavaScript声明全局变量访问方法

    - **作用域冲突**:全局变量可能会导致命名冲突,尤其是在大型项目中,多个模块可能无意间使用相同的全局变量名称,从而引发错误。 - **内存消耗**:全局变量在整个程序生命周期内都存在,会占用内存资源,因此不...

Global site tag (gtag.js) - Google Analytics