• Android中的Application类在应用程序中的应用


    Application类

    每次应用程序运行时,应用程序的Application类都保持实例化状态(都会持有该Application实例)。与Activity不同的是,配置改变并不会导致应用程序重启。在应用程序内部,通过扩展Application类,可以完成以下三项工作:

    1. 对Android运行时(接收到)广播的应用程序级别事件(如低内存事件广播)作出相应;

    2. 在应用程序组件之间传递对象(应用程序内部的多个Activity之间,或其他组件之间);

    3. 管理和维护多个应用程序组件使用的资源;

    当在Manifest中注册了Application实现以后,它会在创建应用个程序进程的时候得到实例化。Application的实现在本质上是单态的,并且应该作为单态进行实现,以便提供对其方法和成员变量的访问。

    如何使用Application?如何自定义Applicaton类?

    自定义的Application类需要使用单例模式被创建,并在Manifest文件中指定该自定义的类。

    在Manifest文件中指定该自定义Application类:

        <application
            android:name=".DemoApplication"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:configChanges="orientation|screenSize|keyboard"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    此时,应用程序在启动时,Application的实现将会被实例化。

    在使用时,创建Application实例,部分代码如下:

    public class DemoApplication extends Application {
        private static final String TAG = DemoApplication.class.getSimpleName();
        // DemoApplication使用单例模式使用
        private static volatile DemoApplication singletonInstance;
        public static DemoApplication getInstance() {
            return singletonInstance;
        }
        @Override
        public void onCreate() {
            super.onCreate();
            LogUtil.d(TAG, "onCreate running...");
            singletonInstance = this;
        }

    创建新的状态变量和全局变量,以便从应用个程序组件中进行访问:

        /**
         * <功能描述> 获取全局的状态变量
         * 
         * @return void [返回类型说明]
         */
        private void getGlobalStateValue() {
        }
        /**
         * <功能描述> 设置全局的状态变量
         * 
         * @return void [返回类型说明]
         */
        private void setGlobalStateValue() {
        }

    以上方法用于维护应用程序状态或实现共享资源,但是一种松散耦合的设计。

    Application类中的其他方法有什么作用?

    Application类为应用程序的创建和终止、低可用内存和配置改变提供了事件处理程序。通过覆写方法实现,应用程序行为。

        @Override
        public void onCreate() {
            // 创建应用程序时调用,用于实例化应用程序单例,创建和实例化应用程序状态变量或共享资源
            super.onCreate();
            LogUtil.d(TAG, "onCreate running...");
            singletonInstance = this;
        }
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            // 配置改变时,应用程序不会被终止和重启,而是回调方法
            super.onConfigurationChanged(newConfig);
            LogUtil.d(TAG, "onConfigurationChanged running...");
        }
        @Override
        public void onLowMemory() {
            // 可用于清空缓存或者释放不必要的资源
            super.onLowMemory();
        }
        @Override
        public void onTrimMemory(int level) {
            // API 13被引入,Android系统认为需要减少应用程序内存开销时调用
            super.onTrimMemory(level);
        }

    应用程序在启动时,会默认启动一个Activity,但这个Activity必须符合一定的规范:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    该Activity被应用程序启动器使用,必须包含一个监听MAIN动作和LAUNCHER分类的intent-filter。

  • 相关阅读:
    今天发现之前瑞乐做的登录和注册居然都是用的get请求,瞬间出了一身冷汗.
    用grunt进行前端工程化之路
    移动端开发库zepto 之我思
    构造高度自适应的textarea
    maxlength属性在textarea里奇怪的表现
    在windows下使用linux的开发环境
    移动web开发的一些坑
    [译]开始学习webpack
    完美解决移动Web小于12px文字居中的问题
    再谈移动端Web屏幕适配
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6391908.html
Copyright © 2020-2023  润新知