在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">
分享到:
相关推荐
这里给出一个示例Activity,演示如何在Activity中使用这些全局变量: ```java package com.tianjf; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util...
- 尽量避免在全局变量中存储大量数据或敏感信息,以防内存泄露或安全风险。 - 对于跨Activity的数据传递,考虑使用Intent来携带数据,或使用Singleton模式创建单例类来保存数据。 总结来说,Eclipse V4.2.0作为...
在Android开发中,全局变量的使用常常是为了在不同的Activity之间共享数据。`Application`类是Android框架提供的一种机制,允许开发者创建一个与应用程序生命周期绑定的单例对象,从而实现全局变量的效果。本篇文章...
在Android开发中,理解并恰当使用全局变量和局部变量是非常重要的。全局变量和局部变量是程序设计中的基本概念,它们各自有不同的作用域和生命周期,因此在编写代码时需要根据需求来选择合适的变量类型。 全局变量...
在Android应用开发中,"Android-Application被回收引发空指针异常分析(消灭全局变量)"是一个常见的问题,尤其对于新手开发者来说,可能会遇到这样的困惑。这篇文章主要探讨了当Application对象被系统回收后,如何...
在Activity之间数据传递中还有一种比较实用的方式 就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何...
在Android开发中,全局变量的使用尤其需要注意。在提供的文件列表中,我们看到了一些与Android项目相关的文件: 1. `proguard.cfg` - 这是ProGuard配置文件,用于混淆、优化和收缩Java代码。在处理全局变量时,...
在Android编程中,全局变量的使用常常涉及到应用的生命周期管理和数据持久化。本文将深入探讨在Android中如何正确地处理全局变量以及遇到的一些常见问题。 首先,全局变量通常用于在整个应用程序范围内共享数据。在...
本教程将深入探讨如何在Android JNI中使用静态(static)变量,以实现Java层与原生代码之间的数据共享。 首先,了解JNI的基本概念是必要的。JNI为Java应用程序提供了一个接口,可以调用本地方法(即非Java代码),...
在Android开发中,全局变量和跨活动(Activity)传值是常见的需求,特别是在需要在整个应用程序范围内共享数据时。本文将详细解析如何利用`Application`类来实现这一目标。 `Application`类是Android系统中的一个...
集成步骤主要包括安装依赖、引入组件库、在页面中使用预设组件。首先,通过npm或yarn安装colorUI,然后在main.js中全局注册组件,最后在需要使用组件的页面中引入并使用。 【uView】: uView UI 是另一个针对uni-...
开发者可以创建自定义的`Application`子类,并在其中存储全局变量,以达到在应用程序的各个组件之间共享数据的目的。这种方式的优点在于,一旦数据在`Application`中设置,所有组件都能访问,而无需每次都通过Intent...
在Android开发中,静态变量(`static`)的使用是一个重要的议题,因为它涉及到应用程序的内存管理、生命周期以及可能引发的问题。下面将详细讨论以下几个方面: 1. **静态变量的生命周期**: - 静态变量在类被加载...
在Android开发中,Android Studio是首选的集成开发环境(IDE),它提供了许多强大的工具和功能,使得开发者可以更高效地构建应用程序。在这个场景中,我们关注的是`AndroidViewModel`类和视图绑定(View Binding)这...
总结来说,理解并正确使用Context和全局变量是Android开发中的关键技能。合理选择Context类型可以避免内存泄漏,而自定义Application类则提供了方便的全局数据存储方案。在实际开发中,要根据需求选择合适的方法,并...
V8Android是一个开源项目,它的目标是在Android应用程序中嵌入Google的V8 JavaScript引擎,以实现JavaScript代码在移动设备上的本地执行。这个项目为开发者提供了一个实用的示例,展示了如何将V8引擎集成到Android...
在Android开发中,全局实例通常指的是在整个应用程序生命周期中都存在的对象,可以被多个Activity、Service或其他组件共享。这种设计模式有助于减少数据重复加载和提高代码的可维护性。本篇文章将详细讲解如何在...
在实际开发中,我们常常需要在非Activity或非Service的类中使用Context,例如工具类、自定义View等。这时可以通过以下两种方式获取Context: 1. **传递Context参数**:在需要使用Context的方法中,作为参数传入。这...
现在回到你的问题,你在JNI中使用了全局引用变量。这可能是为了确保Java对象在本地方法执行完后仍然存活,以便在后续的本地代码中继续使用。例如,如果你有一个线程或者回调需要长期保留Java对象,全局引用就非常...