Android的Application理解
一 概述
在之前所使用的的架構:VC的MFC,MTK平台開發;這兩個平台相似之處是:基於Application開發;
MFC是基於Application的Document/View的方式,每個Application就是一個進程;
MTK是基於Application的Screen/Page,Service的方式,每個Application都有自己的記憶體和管理方式;這兩種方式的核心是:Application;
在Android開發學習中從HelloWord開始,我沒有能夠見到Application的相關代碼,而是以Activity為入口;
讓我感到很奇怪:Android的Application到底是怎麼樣的一種開發方式。
從各處瞭解到的是Android開發的核心是四大組件:Activity,Service,BroadcastReceiver,ContentProvider;
以及Intent,Handler等機制;這樣一些組件所 組成 的“Application”又是怎麼一回事呢?
二 Android Application概念
Android中提供了Application這樣一個類;看一下Android官方文檔對此類的解釋:
Base class for those who need to maintain global application state.
You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag,
which will cause that class to be instantiated for you when the process for your application/package is created.
大概意思就是:需要為應用程式提供全域變數,在AndroidManifest.xml中指定所實現的Application子類;
當你的Application進程被建立時,此類被執行個體化;
文檔解釋中也提到,實現Application子類並不是必須的;
在實現HelloWord程式裡面,就沒有實現Application子類,但是系統會為我們預設一個;
就是程式運行還是有Application概念的但不是核心,一個Application是一個進程,Application為整個程式提供Context; 此類使用非常簡單;
Mms模組重寫了這個類但是很簡單,看看其中做了些什麼事情及其作用:
其中重寫了onCreate方法:
public class MmsApp extends Application {
@Override
public void onCreate() {
super.onCreate();
sMmsApp = this;
//對Mms模組中的類進行配置和初始化:
MmsConfig.init(this);
Contact.init(this);
DraftCache.init(this);
Conversation.init(this);
…… //很多init
}};
三 Android Application
http://blog.csdn.net/maxleng/article/details/5621345
看一下網路上牛人對這個問題的分析:Android的應用是一個很虛的概念,並沒有實際入口;
Android更多的提供組件(component)的概念;為何要虛化Application這個概念呢?這個虛化就是自由無邊界設計意圖的直接體現。
突出請求和服務,突出組件個體弱化邊界,系統組件可以無邊界交流,服務要求者直接發出請求,無論這個物件服務在何處和屬於誰。
組件是自由獨立的個體;一個程式可以請求其他應用的組件——Android應用程式框架設計的核心理念;
Android提供給開發程式員的概念空間中Application只是一個鬆散的表徵概念,沒有多少實質上的表徵。
在Android實際空間中看不到實際意義上的應用程式的概念,即使有一個叫Application的類,這個也就是個應用程式上下文狀態,
是一個極度弱化的概念。Application只是一個空間範疇的概念,Application就是Activity,Service之類的組件上下文描述。
Application並不是Android的核心概念,而Activity才是Android的核心概念。
Android應用程式是由以下四種組件構造而成的:Activity,Broadcast Receiver,服務(Service),內容提供器(Content Provider)。
我們可以使用下面的圖來表示一下Android的概念空間。這些組件依附於應用程式中,應用程式並不會一開始就建立起來,而是在這些組件建立起來後,
需要運行時,才開始建立應用程式物件。