zoukankan      html  css  js  c++  java
  • Android基础之三:Application

    • Application是Android系统级组件之一,但是并不在Android四大组件之列,在应用程序整个生命周期中Application系统会自动实例化一个唯一的对象,更改Application的配置并不会使Android应用程序重启,而Activity配置发生改变会造成Activity的重启
    • Application是单例模式类的典型体现
    • 一般不需要自己创建Application类,但是出于某些需要可以自定义Application类
      • 编写一个类继承自Application
      • public class UApplication extends Application{
            private static UApplication mApplication;
            @Override
            public void onCreate() {
                super.onCreate();
                mApplication=this;
            }
            public static UApplication getInstance() {
                return mApplication;
            }
        }
      • 在Manifest配置文件中使用自定义的Application
      • <application
                    android:label="@string/app_name"
                    android:allowClearUserData="true"
                    android:name=".UApplication"
                    android:theme="@android:style/Theme.Holo.Light"
                    android:icon="@drawable/ic_launcher">
                <activity
                    android:name="MyActivity"
                    android:launchMode="standard"
                    android:windowSoftInputMode="adjustResize"
                    android:icon="@drawable/back6"
                    android:label="主页">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
                <activity android:name=".TAct"
                          android:icon="@drawable/logo"
                          android:parentActivityName=".MyActivity"
                          android:label="TAct">
                </activity>
                <service android:name=".MService"/>
            </application>
    • 启动Application时,系统会创建一个PID,即进程ID,所有的Activity将在该进程中执行
    • Application对象的声明周期是整个应用中最长的,与程序的生命周期一样,同时因为是单态的,因此能够实现跨Activity实现数据共享、数据传递和数据缓存
    • Application进行数据共享的优点:
      • Application在程序声明周期中一直存在,在其中声明的成员属性等能够一直存在,同时当数据发生改变时,Activity中的数据都会发生改变
      • 只有在所有Activity被destory后才会释放,数据有保障
    • 虽然Application进行数据共享是很有效且常用的方法,但是如果数据量较大,在Application中保存大量数据会造成应用反应迟钝,不利于应用性能提升,因此在数据量大时给出的策略是:
      • 使用另外的单态类来进行数据存储,在需要使用的时候进行实例化,而不一定在Application创建的时候就实例化,在不需要使用的时候销毁
      • 将大数据写入到文件中,在Application中保存文件的路径,注意,保存值在应用销毁后会自动清理内存,但是写入文件如果需要在destory的时候清理需要手动执行,即在生命周期事件中定义
    • Application生命周期:
      • Application的声明周期就等于是程序的生命周期
      • 常用重写生命周期
        • onCreate:Application创建,程序启动
        • onLowMenory:系统内存不足时响应
        • onTrimMemory:系统清理内存时响应
        • onTerminate:程序终止时触发响应,只有在模拟器中才可能触发,在真机中不会触发
        • onConfigurationChanged:程序配置发生改变时,例如屏幕oritation发生改变
    • Application本质上也是一个全局Context实例,因此Context能够做的事情,Application实例一般也能做,在Activity中通过getApplication()获取Application实例
    • Application应用场景
      • 如果需要在不同的Activity之间进行数据共享
      • 如果需要根据Application的声明周期进行处理
    • Application在Manifest中的配置
      • <application>节点作为<manifest>的子节点存在
      • 常用属性:
        • alowClearUserData:允许用户通过系统管理方式进行清理用户数据
        • icon:应用的图标
        • theme:默认主题风格
        • label:应用名
        • debuggable:是否开启测试
        • backupAgent:应用备份
        • description:应用描述
        • enabled:是否可用
        • permission:需要权限
        • persistant:开机启动
        • process:进程,通过:来定义进程
      • 子节点
        • activity
        • receiver
        • provider
        • meta-data
      • 详情代码
      • <application android:allowClearUserData=["true" | "false"]
                     android:label="string resource"
                     android:icon="drawable resource"
                     android:name="string"
                     android:allowTaskReparenting=["true" | "false"]
                     android:backupAgent="string"
                     android:debuggable=["true" | "false"]
                     android:description="string resource"
                     android:enabled=["true" | "false"]
                     android:hasCode=["true" | "false"]
                     android:killAfterRestore=["true" | "false"]
                     android:manageSpaceActivity="string"
                     android:permission="string"
                     android:persistent=["true" | "false"]
                     android:process="string"
                     android:restoreAnyVersion=["true" | "false"]
                     android:taskAffinity="string"
                     android:theme="resource or theme" >
                <activity
                    android:name="MyActivity"
                    android:launchMode="standard"
                    android:windowSoftInputMode="adjustResize"
                    android:icon="@drawable/back6"
                    android:label="主页">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
                <activity android:name=".TAct"
                          android:icon="@drawable/logo"
                          android:parentActivityName=".MyActivity"
                          android:label="TAct">
                </activity>
                <service android:name=".MService"/>
        </application>        
  • 相关阅读:
    笔记0510
    笔记0514
    笔记0521
    GridView专题
    笔记0418
    笔记0516
    笔记0515
    笔记0507
    Python 安装与环境变量配置
    ffmpeg 下载安装和简单应用
  • 原文地址:https://www.cnblogs.com/xl-xlg/p/5028180.html
Copyright © 2011-2022 走看看