android中的Application

Application类(应用类):


作用:一个典型的Android应用是一个由活动、广播接收方、服务、和内容提供方组成的集体。应用类是吧所有这些不同的部分粘合成一个单一的、相融的实体的胶水。

每当清单文件中的初始化一个内容提供方、活动、服务、或意图接收方的时候,也同时启动一个应用类。并使其可用。



为什么要是使用应用类:

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);
    }
}


运行结果:
                                   \
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页