开发中,不知道你有没有发现,static非常好用,但是却暴露很大问题,一些莫名奇妙的错误,经常遇到的是:空指针等问题,static访问是无法跨进程的。Android中的Activity,Service是可以在各自进程中运行的,用static传递参数到不同进程的Activity、Service时会错。
static占据的那份内存,不知道就很可能被回收掉了,导致出错。
如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。 首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。 启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。下面举个例子详细介绍一下应用步骤。下面是MyApp.javapackage com.android.test;import android.app.Application;public class MyApp extends Application{ private String mylabel ; public String getLabel(){ return mylabel; } public void setLabel(String s){ this.mylabel = s; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); setLabel("Welcome!"); //初始化全局变量 }}下面是mainActivity.javapackage com.ginwave.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class mainActivity extends Activity { private MyApp myApp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myApp = (MyApp) getApplication(); //获得自定义的应用程序MyApp Log.i("guoll", "InitLabel:"+myApp.getLabel()); //将我们放到进程中的全局变量拿出来,看是不是我们曾经设置的值 myApp.setLabel("Changing!"); //修改一下 Log.i("guoll", "ChangeLabel:"+myApp.getLabel()); //看下,这个值改变了没有 Intent intent = new Intent(); //再看一下在另一个Activity中是取到初始化的值,还是取到修改后的值 intent.setClass(this, otherActivity.class); startActivity(intent); }}另一个otherActivity.java:package com.android.test;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class otherActivity extends Activity{ private MyApp myApp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myApp = (MyApp) getApplication(); //获得自定义的应用程序MyApp Log.i("guoll", "OhterActivity receive the Label:"+myApp.getLabel()); //查看变量值是否修改了 }}修改配置文件ApplicationManifest.xml,将要运行的应用程序MyApp加进去:<?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设置成自己做的MyApp--> <application android:name="MyApp" 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>
分享到:
相关推荐
静态全局变量,静态局部变量,全局变量,局部变量静态全局变量,静态局部变量,全局变量,局部变量
全局变量、局部变量、静态全局变量、静态局部变量的区别
wpf 给控件绑定静态变量,静态变理改变后控件上的值随着变量的demo,这只是个demo,具体应用场景可以根据实际的情况进行调整,本demo使用 vs2019进行编写。
CC++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
在Activity之间数据传递中还有一种比较实用的方式 就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何...
在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...
项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的...在Android中,用的DVM也是一样的,不过Android中不太突出进程的概念,所以对静态变量的生命周期就是感觉模糊,这种模糊对于值类型是无所谓的,如
wpf 给控件绑定静态变量,静态变理改变后控件上的值随着变量的demo,这只是个demo,具体应用场景可以根据实际的情况进行调整,本demo使用 vs2019进行编写。
全局变量、局部变量、静态变量三者的区别。
android 全局变量的定义使用
而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。 首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化...
在C++中,声明一个类,并且定义一个全局变量,练习全局变量的使用。注意全局变量的使用技巧和方法。
比较局部变量、全局变量、堆、堆栈、静态和全局的区别和联系。
python局部变量全局变量-静态方法-实例变量静态变量代码解析。
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。
全局变量,静态变量,局部变量的区别,以及其内存分配情况,栈和堆的区别
block,局部变量,全部变量,static的静态变量关系
这是我自己写的android jni调用java static属性的例子
Android-Application被回收引发空指针异常分析(消灭全局变量)-例子 http://blog.csdn.net/zivensonice/article/details/51451486