Application类(应用类):
每当清单文件中的初始化一个内容提供方、活动、服务、或意图接收方的时候,也同时启动一个应用类。并使其可用。
为什么要是使用应用类:
1、活动非常短暂
2、活动不能访问彼此的存储空间,他们通过以意图来通信。
3、由于各种原因,活动不断被终止和启动,活动无法知道自己是否是应用运行期间的第一次启动。而另一方面,只有在应用初始化的时候才调用应用类的onCreat
方法。
而应用类很适合于执行只在应用第一次启动时才会发生的动作。
对于涉及多活动的数据,需要一个临时的存放地,属于应用类一部分的某个数据成员是很便于存储它的地方。
tip:
向应用中添加数据是要非常小心的。在清单文件中声明任何单一构件,都会先创建应用类对象。这意味着必须让应用类的onCreat方法运行得尽可能快。否则会抛出Null pointer exception异常。
以下内容转载至: http://www.android100.org/html/201406/04/17304.html
定义:
Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。
Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。
实现代码:
1、继承Application
public class CustomApplication extends Application
{
private static final String VALUE = "Harvey";
private String value;
@Override
public void onCreate()
{
super.onCreate();
setValue(VALUE); // 初始化全局变量
}
public void setValue(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
}
注:继承Application类,主要重写里面的onCreate()方法(android.app.Application包的onCreate()才是真正的Android程序的入口点),就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。
2、在ApplicationManifest.xml文件中配置自定义的Application
<application
android:name="CustomApplication">
</application>
实例代码:
public class FirstActivity extends Activity
{
private CustomApplication app;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (CustomApplication) getApplication(); // 获得CustomApplication对象
Log.i("FirstActivity", "初始值=====" + app.getValue()); // 获取进程中的全局变量值,看是否是初始化值
app.setValue("Harvey Ren"); // 重新设置值
Log.i("FirstActivity", "修改后=====" + app.getValue()); // 再次获取进程中的全局变量值,看是否被修改
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);
}
}
![\](https://i-blog.csdnimg.cn/blog_migrate/e49c4fbfcd37f946c422b42393893e1e.png)