android全局变量定义
A. android如何让系统库成为全局
一、通过Settings.System进行读写
//其中"getXXX"代表对应的类似方法,如getInt()、getBoolean、putString()等。
//通过变量名称获取值,如果变量不存在,数据库中没有设置过初始值或者该值类型不对,将抛出SettingNotFoundException异常
Settings.System.getXXX(ContentResolver cr, String name);
//通过变量名称获取值,如果发生上面方法中导致异常的情况,将返给定的默认值
Settings.System.getXXX(ContentResolver cr, String name, XXX def);
//将指定名称的值写入数据库
Settings.System.putXXX(ContentResolver cr,String name, XXX Value);
非系统权限,需要在App项目的AndroidMainfes.xml文件中添加如下权限:
<uses-permission android:name="android.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />
二、在Settings.System添加一个自定义的全局变量
Settings.java文件位于frameworks\base\core\java\android\provider下,打开该文件,搜索关键词 SETTINGS_TO_BACKUP ,共有两处,一处是在Settings里面,另一处在内部类Settings.System里面,在SETTINGS_TO_BACKUP数组上面添加自定义变量,同时在该数组里面添加自定义变量名称,Settting和内部类System都需要添加(共四个地方),比如自定义系统变量SYSTEM_ZWH:
public static final String SYSTEM_ZWH = "system_zwh"; Public static final String[] SETTINGS_TO_BACKUP = { ... SYSTEM_ZWH, ... }
在代码中我们就可以通过对于的get和put方法对该值进行读取和写入操作了。
B. 在Android中如何使用全局变量--Application context (转)
可以将变量存放在Application中,Context,中文直译为“上下文”,SDK中对其说明如下:
Interface to global information about an application environment. This is an abstract class whose implementation
is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls
for application-level operations such as launching activities, broadcasting and receiving intents, etc。
从上可知一下三点即:
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。
3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等。
以下为使用Application存储全局变量的示例代码:
1.继承Application,并在Application里声明全局变量。
public class MyApplication extends Application {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2.在AndroidManifest.xml的application节点中声明这个Application。
<application android:name="com.xxx.xxx.MyApplication">
3.在Activity中获取Application对象,并存取全局变量。
User user = new User();
user.setUserName("example");
MyrApplication app= (MyApplication ) getApplicationContext();
app.setUser(user); //将变量存到application
User tmp = app.getUser();//从application中读取全局变量。
C. 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()方法获取这个实例,进而获取其中的状态(变量)。
D. android使用全局变量.求解答@慈税。
使用静态类:
- public class Data{ private static String a ="Hello Android"; public static String getA() { return a;
- } public static void setA(String a) {
- Data.a = a;
- }
- }123456789101112
- /**
- * 自定义的MyApplication继承Application
- *
- * @author way
- *
- */ public class MyApplication extends Application {
- /**
- * 引发异常:在一些不规范的代码中经常看到Activity或者是Service当中定义许多静态成员属性。这样做可能会造成许多莫名其妙的 null pointer异常。
- */
- /**
- * 异常分析:Java虚拟机的垃圾回收机制会主动回收没有被引用的对象或属性。在内存不足时,虚拟机会主动回收处于后台的Activity或
- * Service所占用的内存。当应用再次去调用静态属性或对象的时候,就会造成null pointer异常
- */
- /**
- * 解决异常:Application在整个应用中,只要进程存在,Application的静态成员变量就不会被回收,不会造成null pointer异常
- */
- private int number;
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- }
- public int getNumber() {
- return number;
- }
- public void setNumber(int number) {
- this.number = number;
- }
- }
- <application android:name=".MyApplication" ...>
- </application>12
- MyApplication application = (MyApplication)this.getApplicationContext();
- //保存变量 application.setNumber(5);
- //取出变量 application.getNumber();12345
而且按照Java及C#的种编辑思想的话,还是建议使用第二种试,这样对于系统的安全是好的!而且我查了一些资料显示,这样也是符合Android这种思想的,因此建议使用第二种方式,设置公共变量!
Application是与应用同时存在的,也就是应用在它就在,并不会被GC给莫名其妙的回收掉,因此,使用此方法更加安全。
调用就不再写了,直接使用类名.变量名就可以调用!
static修饰的静态变量,使用很方便,在不同的类和包中都可以使用,在虚拟机中单独占用内存,没错,这些都是它们的优点,不过在项目上线后,才发现static有一些不太好的地方。
在查看项目的崩溃信息时,发现很多地方莫明的出现空指针异常的错误,经过排查,发现可能就是static的问题。我们在项目中,将用户的信息也就是User对象保存成了一个静态变量,而在报错的地方,也都发现有使用过这种变量,因此,可以大致推断出与这种保存的方式有一定的联系。同时,有不少用户反映在打开应用的情况下,接个电话或者长时间待机后,再回到应用也会出现崩溃的现象,而这些崩溃都与静态变量的空指针有关系。
如此来说的话,static静态修饰在Android的开发中是不是很危险?或许我们可以说如果是static User u = new User();这样定义的话,那么应该不会有太大问题,而如果是static User u;这样定义的话,那么很可以会出现NULL的现象。当然,前面的方法里面的属性也可能会现空的情况,但是这个可以用封装来避免空指针。另外静态常量还是很好用的。
那么应该如何保存登录或者全局的信息呢?根据Google官方的推荐以及网络到的各位大神的推荐,我们应该尽量使用继承自Application的自定义类,在我们继承的类中定义需要全局使用的变量,并通过getApplicationContext()来获取和保存相关的变量即可。
2.使用Application
不过,为了让我们的MyApplication取代android.app.Application的地位,在我们的代码中生效,我们需要修改AndroidManifest.xml:
下面我们就可以在Activity或Service中灵活使用了:
阅读全文
E. 在Android中如何使用全局变量
关于android中是否可以使用全局变量,当然可以。做Java的人肯定都用过全局变量了 ,使用方法无非是定义一个静态变量,public类型,这样在其他类中就可以直接调用了
F. 什么是全局变量定义
全局变量就是在程序的任意一行代码都可以引用的变量。
作用域是整个程序
一般在一对大括号里面声明的变量是不能再这对大括号外引用的,而全局变量先于所有函数声明,所以作用域是整个程序。
如果在某对大括号内有和全局变量同名的变量,则以范围小的变量声明为准
G. Android中gradle文件中${ } 全局变量在哪里定义的
为方便在不同mole中设置版本号等配置信息,可以通过配置全局变量来统一所有mole的公共配置信息。
设置方法一般分为两种:
一、独立文件配置
1.1.在项目的根目录下新建config.gradle文件
1.2.将gradle中的公共信息写入config.gradle文件中:
1.3.在主项目的build.gradle中申明一下:
1.4.在项目中引用我们的路径配置。如下图:
二、在gradle.properties或者local.properties文件中配置
如下为签名配置:
看了觉得也还挺方便的,但是!需要注意的是:因为用到的都是String变量,当需要到Integer变量时,就麻烦点了:
需要用Integer.parseInt();方法对String类型进行转换!
H. 全局变量和const定义是什么
全局变量的定义为本函数和其他函数所共用。
const定义是指使用类型修饰符const说明的类型。
I. javaAndroid开发,如何定义全局变量
自定义一个类继承Application,fontFace作为一个静态变量放在Application里,重写自定义Application类的onCreate方法,在里面初始化fontFace变量,最后记得在AndroidManifest里注册自定义的Application类
引用的时候用Application类名.fontFace就可以了
J. android Application全局变量
不是啊,你声明在类里面而不是onCreate方法里面就可以在这个Activity中使用。
public class GuessNumberActivity extends Activity {
Button btn1 = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.btn1);
}
//在其他函数中使用
bt1.setOnClickListener(new Button.onClickListener(){.........});