Android采用Application总结一下
Application和Activity,Service由于是android框架的一個系統組件,當android程序啟動時系統會創建一個 application對象。用來存儲系統的一些信息。通常我們是不須要指定一個Application的,這時系統會自己主動幫我們創建,假設須要創建自己 的Application。也非常easy創建一個類繼承 Application并在manifest的application標簽中進行注冊(僅僅須要給Application標簽添加個name屬性把自己的 Application的名字定入就可以)。
? ? ? ? ?Android提供給開發程序猿的概念空間中Application僅僅是一個松散的表征概念,沒有多少實質上的表征。
在Android實際空間中看不到實際意義上的應用程序的概念,即使有一個叫Application的類,這個也就是個應用程序上下文狀態。是一個極度弱化的概念。Application僅僅是一個空間范疇的概念。Application就是Activity。Service之類的組件上下文描寫敘述。Application并非Android的核心概念,而Activity才是Android的核心概念。
? ? ? 從Android的SDK文檔中。我們知道普通情況Android應用程序是由下面四種組件構造而成的:Activity,Broadcast Intent Receiver,服務(Service)。內容提供器(Content Provider)。
android系統會為每一個程序執行時創建一個Application類的對象且僅創建一個。所以Application能夠說是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的。它的生命周期就等于這個程序的生命周期。由于它是全局 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。
所以通過Application來進行一些。數據傳遞,數據共享 等,數據緩存等操作。
Application數據緩存
? ? ? 我通常會習慣在application中建立兩個HashMap一個用于數據的傳遞。一個用于緩 存一些數據。
比方有一個Activity須要從站點獲取一些數據,獲取完之后我們就能夠把這個數據cache到Application 其中,當頁面設置到其他Activity再回來的時候,就能夠直接使用緩存好的數據了。
但假設須要cache一些大量的數據,最好是cache一些 (軟引用)SoftReference 。并把這些數據cache到本地rom上或者sd卡上。假設在application中的緩存不存在,從本地緩存查找,假設本地緩存的數據也不存在再從網 絡上獲取。
Android使用Application
?首先須要重寫Application,主要重寫里面的onCreate方法,就是創建的時候。初始化變量的值。然后在整個應用中的各個文件里就能夠對該變量進行操作了。 ?
? 啟動Application時。系統會創建一個PID,即進程ID。全部的Activity就會在此進程上執行。那么我們在Application創建的時候初始化全局變量,同一個應用的全部Activity都能夠取到這些全局變量的值,換句話說。我們在某一個Activity中改變了這些全局變量的值,那么在同一個應用的其它Activity中值就會改變。
步驟:第一步、寫一個全局的單例模式的MyApplication繼承自Application 覆蓋onCreate ,在這種方法里面實例化Application?
? ? ? ? ? 第二步、配置全局的Context
Application 配置全局Context ?
第一步、寫一個全局的單例模式的MyApplication繼承自Application 覆蓋onCreate ,在這種方法里面實例化Application ?
第二步、配置全局的Context ?
<application
? ? ? ? android:name="com.example.utils.myapplication"
? ? ? ? android:allowBackup="true"
? ? ? ? android:icon="@drawable/ic_launcher"
? ? ? ? android:label="@string/app_name"
? ? ? ? android:theme="@style/AppTheme" >
</application> ?
第三步、使用,使用的時候用的時候依據類的名稱訪問Context ?
android.app.Application類包括了4個公開的方法
void ?onConfigurationChanged(Configuration newConfig)
void ?onCreate() ?//這里才是真正的入口點。
void ?onLowMemory()
void ?onTerminate()
說明:
? ? ? onCreate(); ?這個函數是當我們的應用開始之時就被調用了,比應用中的其它對象創建的早。這個實現盡可能的快一點。由于這個時間直接影響到我們第一個activity/service/receiver。
假設你要重寫這種方法必須調用super.onCreate().
? ? ? onTerminate(): 這個函數是模擬一個過程環境,在真機中永遠也不會被調用。
真正的Android入口點是application的main,你能夠看下androidmanifest.xml的包括關系就清楚了,并非每一個應用都必須有Activity的。
/*** 全局application,為什么要用application。主要是由于這就像一個session。* 用于暫時保存各種傳值,serverurl,假設用數據庫或者其它的操作來保存這些* 數據的話管理起來就非常繁瑣,并且也不利于程序的執行速度。* */
package com.example.utils;import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.StrictMode;public class myapplication extends Application {private UsersDBManager UsersDBManager1;private SystemDBManager SystemDBManager1;private SubmitDBManager submitDBManager1;/*** 為了全然退出程序調用方法 myapplication1.getInstance().addActivity(this);* myapplication1.getInstance().exit();*/private static myapplication instance;private List<Activity> activityList = new LinkedList<Activity>();public myapplication() {}// 單例模式獲取唯一的MyApplication實例public static myapplication getInstance() {if (null == instance) {instance = new myapplication();}return instance;}// 加入Activity到容器中public void addActivity(Activity activity) {activityList.add(activity);}// 遍歷全部Activity并finishpublic void exit() {for (Activity activity : activityList) {activity.finish();}System.exit(0);}@SuppressLint("NewApi")@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();UsersDBManager1 = new UsersDBManager(this);SystemDBManager1 = new SystemDBManager(this);submitDBManager1 = new SubmitDBManager(this);// 初始化全局變量try {/*** 加入網絡權限,安卓4.03必須*/StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());/*** 加入網絡權限,安卓4.03必須*/} catch (Exception e) {e.printStackTrace();}}}application中有幾個變量和對應的setter?getter方法。
在其它activity之后調用例如以下
myapplication = (myapplication) getApplication();myapplication.getInstance().addActivity(this);版權聲明:本文博主原創文章,博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/blfshiye/p/4947044.html
總結
以上是生活随笔為你收集整理的Android采用Application总结一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腕开头的成语有哪些啊?
- 下一篇: asp.net httpmodule 访