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>        
相关文章
相关标签/搜索