您的位置:首页 > 移动开发

使用application传递全局变量

2016-07-07 14:00 477 查看
1、有关application的说明

(1)Application和Activity,Service一样是Android框架的系统组件,当Android程序启动时系统创建一个Application对象,用来存储系统的一些信息。Android系统自动回位每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例模式的一个类。

(2)通常我们不需要指定一个application的,系统会自动帮我们创建,如果我们需要自己创建一个Application,只需要创建一个类继承Application并且在AndroidMainfest.xml文件中的application标签中进行注册(在application标签添加name属性,并且添加自己Application的名字就可以)

(3)启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

(4)Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

2、应用实例

MainActivity

package com.example.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;
private String log;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myApp=(MyApp) getApplication();
Log.i(log,"修改前的value"+myApp.getValue());
myApp.setValue("hello");
Log.i(log,"修改后的value"+myApp.getValue());
Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);
}
}


SecondActivity

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SecondActivity extends Activity {
private MyApp myApp;
private String log;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
myApp=(MyApp)getApplication();
Log.i(log,"调用secondActivity查看"+myApp.getValue());
}
}


MyApp

package com.example.test;

import android.app.Application;

public class MyApp extends Application{
private String str="VALUE";
private String value;
@Override
public void onCreate(){
super.onCreate();
setValue(str);
}
public void setValue(String value) {
// TODO Auto-generated method stub
this.value=value;
}
public String getValue(){
return value;
}
}


AndroidMainfest.xml

<!--添加了name属性-->
<application
android:name="MyApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test.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=".SecondActivity"></activity>
</application>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android