zoukankan      html  css  js  c++  java
  • [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html

    Application

    Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。

    Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。

    通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。

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

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

    应用场景:

    在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。

    实现步骤:

    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>

    实例代码:

    CustomApplication.java

    复制代码
    /**
     * 继承Application
     * 
     * @author admin
     * 
     */
    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;
        }
    }
    复制代码

    FirstActivity.java

    复制代码
    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);
        }
    }
    复制代码

    注:只需要调用Context getApplicationContext或者ActivitygetApplication方法来获得一个Application对象,然后再得到相应的成员变量即可。它是代表我们的应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。

    SecondActivity.java

    复制代码
    public class SecondActivity extends Activity
    {
        private CustomApplication app;
        
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    app = (CustomApplication) getApplication(); // 获取应用程序

    Log.i("SecondActivity", "当前值=====" + app.getValue()); // 获取全局值 } }
    复制代码

    AndroidManifest.xml

    复制代码
    <?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>
    复制代码
     
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/ryq2014/p/5291908.html
Copyright © 2011-2022 走看看