1、Application类是什么
Application和Activity、Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,且只有一个,同一个程序里的所有Activity获得的Application对象都是同一个。
通常我们不需要指定一个Application,因为系统会给我们创建。如果要自己创建Application的话,创建一个类继承Application并在AndroidManifest.xml中的application标签进行注册,注册就是给application标签增加一个name属性,值为我们自己创建的Application类。
Application运行后会创建一个进程,此application的所有Activity都在这个进程上运行。在Application创建时初始化全局变量,则所有的Activity都可以获得这些全局变量,且在某一个Activity中改变某一个全局变量的值时,其他Activity中的此全局变量值也会改变。
Application类对象的生命周期是整个程序中最长的。等于程序的整个生命周期。它是全局的、单例的,所以可以进行:数据传递、数据保存、数据共享等操作。直到程序的所有Activity都被destory掉才会释放掉Application里面的内容。
2、自定义Application类
public class MyApplication extends Application{
private static final String a = "yzq9958";
private String b;
@Override
public void onCreate(){
super.onCreate();
setValue(a);
}
public void setValue(String value){
this.b = a;
}
public void getValue(){
return b;
}
}
继承Application类主要是Override里面的onCreate()方法,对里面的全局变量进行初始化,然后该程序里的其他文件就可以对该变量进行使用了。android.app.Application包里的onCreate()才是真正的Android程序的入口。
3、在AndroidManifest.xml文件中注册MyApplication。
<application>
android:name="MyApplication"
</application>
4、应用
public class FirstActivity extends Activity
{
private MyApplication app;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (MyApplication) getApplication(); // 获得MyApplication对象
Log.i("FirstActivity", "初始值=====" + app.getValue()); // 获取进程中的全局变量值,看是否是初始化值
app.setValue("Hello"); // 重新设置值
Log.i("FirstActivity", "修改后=====" + app.getValue()); // 再次获取进程中的全局变量值,看是否被修改
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);
}
}
使用Activity的getApplication方法或者Context的getApplicationContext()方法来获得Application对象,这个对象即代表了这个程序(或者叫应用),然后即可使用其成员变量和程序里面的主题、文件等资源。
public class SecondActivity extends Activity
{
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (myApplication) getApplication(); // 获取应用程序
Log.i("SecondActivity", "当前值=====" + app.getValue()); // 获取全局值
}
}
最后AndroidManifest文件
<?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">
<uses-sdk
android:minSdkVersion="8" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="CustomApplication">
<!-- 将我们以前一直用的默认Application设置成自定义的CustomApplication -->
<activity
android:name=".FirstActivity"
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"
android:label="@string/app_name">
</activity>
</application>
</manifest>