專利名稱::一種維護計算裝置中的應(yīng)用程序的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種維護計算裝置中的應(yīng)用程序(application)的方法,具體而言,涉及一種方法,其通過計算裝置上的操作系統(tǒng)以統(tǒng)一的方式,而無論應(yīng)用程序類型或者執(zhí)行環(huán)境,來管理用戶應(yīng)用程序的生命周期及其相關(guān)資源。
背景技術(shù):
:本文所用的術(shù)語計算裝置應(yīng)廣義地解釋為涵蓋任何形式的電子計算裝置,其包括數(shù)據(jù)記錄裝置、任何形式的計算機(包括手持式和個人計算機)、以及任何形式因素的通信裝置,其包括移動電話、智能電話、集成通信、圖像記錄和/或回放、以及計算功能于一體的通信機、以及其他形式的無線和有線信息裝置。直到二十年前,應(yīng)用程序管理才成為很多計算裝置的研究課題。當操作員或用戶從磁帶或者磁盤一個個地加載應(yīng)用程序時,應(yīng)用程序與介質(zhì)之間的一一對應(yīng)意味著操作員或用戶通常準確地知道加載了哪個應(yīng)用程序;而早期的多用戶操作系統(tǒng)允許同時加載多個應(yīng)用程序,操作系統(tǒng)與這些應(yīng)用程序之間的交互一般是極易預測的,并且這些應(yīng)用程序本身之間的交互相當?shù)厣?。其實,當時的應(yīng)用程序可分為兩種在運行的和未在運行的。然而,低成本高容量磁盤存儲的廣泛普及使加載應(yīng)用程序所涉及的邊際成本降低到幾乎為零。低成本存儲器的廣泛普及極大地解決了加載多個應(yīng)用程序所導致的存儲器爭用問題。并且,操作系統(tǒng)的不斷發(fā)展導致產(chǎn)生了豐富的共享庫和公用應(yīng)用編程接口(applicationprogramminginterface,縮寫為API),這促進了進程間通信(inter-processcommunication)??傊?,這三個發(fā)展促進了三種應(yīng)用程序概念。因而,除了上面提及的兩種應(yīng)用程序(即,在運行的和不在運行的)以外,現(xiàn)在具有第三種“已安裝”的應(yīng)用程序。這些應(yīng)用程序不是在運行的應(yīng)用程序,但它們可以加載到本地存儲器中,并且在安裝它們時,一般會使操作系統(tǒng)發(fā)生一些變化例如,升級或安裝系統(tǒng)庫,或改變系統(tǒng)注冊。人們非常希望將一些命令和結(jié)構(gòu)帶入將應(yīng)用程序安裝到目前的計算裝置上的工作中。當每個應(yīng)用程序從任何集中管理中釋放出來,所導致的混亂很容易使整個操作系統(tǒng)不穩(wěn)定,于是計算裝置本身的運行也面臨風險。第四個發(fā)展對應(yīng)用程序進一步穩(wěn)定推動的正確管理提出了要求。這是指以下情況所導致的互連性方面的進展廉價公眾互聯(lián)網(wǎng)應(yīng)用的廣泛普及;永久連接固定和移動計算裝置的增加使用;以及在網(wǎng)絡(luò)應(yīng)用例如web瀏覽和電子郵件方面的爆炸式增長。這些變化一起使得用戶意識到計算裝置的安全以及他們面對電子攻擊的脆弱性現(xiàn)在變成了主要問題,而不再是理論問題。盡管電子攻擊的歷史已經(jīng)超過了20年之久(第一個計算機病毒在很久以前1983年就已產(chǎn)生),由于互連性的成長才使得這成為了嚴重的威脅,事實上所有計算裝置的用戶都已經(jīng)感到面臨這種威脅。目前的開放式操作系統(tǒng)可能實行各種各樣的應(yīng)用程序管理和安全方案;然而,它們對于管理應(yīng)用程序生命周期的問題都有相對標準的方法。該方法是指提供非強制應(yīng)用程序管理器(manager),應(yīng)用程序可用它進行登記,安裝和卸載機制,這可以是或者不是應(yīng)用程序規(guī)范(specific),但通常綁定至本地可執(zhí)行程序(nativeexecutable)的傳統(tǒng)應(yīng)用程序模式及其資源。臺式計算機上的Microsoft操作系統(tǒng)的用戶將熟悉該方法,因為Windows安裝器(installer)以及第三方機構(gòu)例如InstallShield使用了該方法。期望這些應(yīng)用程序能登陸到應(yīng)用程序管理器,并遵從其操作指引;如果做到這一點,那么核心服務(wù)例如控制面板(ControlPanel)將獲知這些應(yīng)用程序,并將提供用于卸載它們的選項。然而,并沒有強制要求這些應(yīng)用程序使用該機制來安裝或卸載它們本身。一些Linux發(fā)布程序(distribution)也使用了這種模式,比較知名的有RedHatPackageManager(RPM)和Debian的AdvancedPackagingTool(APT),這些發(fā)布程序管理應(yīng)用程序的安裝和卸載,但沒有解決可以繞過這種機制的可能性。SymbianLimitedofLondon提供的SumbianOSTM操作系統(tǒng)的直到版本8的所有版本,通過Symbian安裝系統(tǒng)(SymbianInstallationSystem(SIS))以及有關(guān)的AppInst體系,也是使用這種模式。盡管目前的操作系統(tǒng)(OperatingSystem,縮寫為OS)中使用的該應(yīng)用程序管理模式就實施和維護而言較簡單,但是這種模式所涉及的問題可以歸類為以下三個主要方面1、在應(yīng)用程序生命周期的各個階段之間缺乏交互性這些問題都涉及各個應(yīng)用程序生命周期階段(這包括加載、執(zhí)行和結(jié)束以及安裝和卸載)之間基本缺乏交互性?!癖M管應(yīng)用程序管理器管理安裝和卸載,但應(yīng)用程序管理器是單獨的部件,在應(yīng)用程序?qū)嶋H執(zhí)行時并不出現(xiàn)。應(yīng)用程序生命周期的這個部分不受到監(jiān)控,這一情況意味著操作系統(tǒng)和其他正運行的程序的安全性和完整性可能受到威脅?!裨谀承┫到y(tǒng)(例如WindowsPC)中,該問題部分地由各個駐留的安全監(jiān)控進程管理;但這些進程并不知道該安裝進程,不能檢查對任何已實施安裝契約所進行的動作,而有關(guān)于此,應(yīng)用程序已經(jīng)宣稱它可能做了。●大多數(shù)操作系統(tǒng)允許任意程序以各種不同方式執(zhí)行,雖然其已有應(yīng)用模式不實施網(wǎng)絡(luò)安全,并具有基本的文件系統(tǒng)安全性。這是一個嚴重問題,因為在此情況下,用戶意識不到在可執(zhí)行程序中的惡意或有害代碼(惡意軟件malware)不僅威脅其本地文件,而且在某些情況下,還威脅網(wǎng)絡(luò)上其他計算機以及系統(tǒng)文件。下面將詳細討論這些安全問題。應(yīng)用程序未運行時不會占用資源,也不會阻止另一應(yīng)用程序使用這些資源。這不一定成為問題,但是某些情況下,安全性涉及要求為特定受信任的應(yīng)用程序保留特定資源,或者將資源維護在特定狀態(tài)。盡管某些操作系統(tǒng)確實提供有限的功能(例如,Linux上的inetd),但在大多數(shù)系統(tǒng)上,實施各個進程以維護或保留這種資源是必須的。當應(yīng)用程序管理器不控制生命周期的特定階段時,這使得其不能處理以下的情況當應(yīng)用程序正在運行時要求卸載。開發(fā)者不得不求助于野方法(kludge),例如要求用戶重啟他們的系統(tǒng)以完成應(yīng)用程序的卸載。對于本領(lǐng)域人員而言,對于編程或硬件設(shè)計或解決問題而言,野方法是指笨拙或蠢笨(但至少臨時有用)的方法。2、對多應(yīng)用程序模式缺乏支持另一個問題是,盡管OS應(yīng)用程序管理系統(tǒng)允許各種類型文件(包括數(shù)據(jù)文件和文檔)的安裝和卸載,但這些系統(tǒng)關(guān)注于單應(yīng)用程序模式。通常,這是本地可執(zhí)行程序;即,由主機操作系統(tǒng)直接加載,和直接交互地加載的程序。然而,在大多數(shù)計算裝置上,還需要支持其他應(yīng)用程序模式,包括通過運行應(yīng)用程序而不是操作系統(tǒng)加載的可執(zhí)行程序,或者由其他可執(zhí)行程序來處理其與操作系統(tǒng)的交互的可執(zhí)行程序,或者這兩種都包括的可執(zhí)行程序。所述這些其他應(yīng)用程序模式包括●解釋型可執(zhí)行程序(各種BASIC中出現(xiàn)了這種可執(zhí)行程序,包括http://www.appforge.com所提到的用于移動裝置的VisualBasicAppforge)●中間碼可執(zhí)行程序(例如PASCALp-code和Javabytecode)●具有嵌入式宏語言的應(yīng)用程序(例如MicrosoftOffice應(yīng)用程序,包括VBA增強語言)●通過運行應(yīng)用程序加載但之后在其內(nèi)部可執(zhí)行的應(yīng)用程序(例如對瀏覽器提供的插件)●使用其他應(yīng)用程序作為操作環(huán)境的應(yīng)用程序(互聯(lián)網(wǎng)腳本應(yīng)用程序例如在瀏覽器中運行的Javascript)●需要由專用應(yīng)用程序管理軟件(ApplicationManagementSoftware,縮寫為AMS)管理的應(yīng)用程序(例如來自于Java的midlets或來自于Qualcomm的BREW)值得注意的是,以上所述并不是一份非本地可執(zhí)行程序(non-nativeexecutable)的完全列表,對于本領(lǐng)域技術(shù)人員來說,顯然還有其他非本地可執(zhí)行程序?,F(xiàn)有的OS應(yīng)用程序管理系統(tǒng)只可以部分地支持這些模式;完全地支持這些其他應(yīng)用程序模式則需要通過各個應(yīng)用程序管理系統(tǒng)來處理。3、缺乏統(tǒng)一的安全機制在討論整個應(yīng)用程序生命周期的各個階段之間的交互缺陷時已經(jīng)提及該問題。關(guān)于現(xiàn)有OS管理系統(tǒng),盡管它們在安裝時可以執(zhí)行某些形式的周界(perimeter)安全性(例如,能夠通知用戶未簽名的應(yīng)用程序和能夠?qū)σ押灻麘?yīng)用程序證明已進行檢查),但沒有將周界安全性與實時安全性統(tǒng)一。因此,開放操作系統(tǒng)(其允許其他程序由用戶或擁有者在制造后(post-manufacture)安裝)允許以各種方式執(zhí)行任意程序。實時安全性的該缺陷通常留下可由對這些程序開放的網(wǎng)絡(luò)和文件系統(tǒng)安全性所訪問的資源。在存在該許可的地方,這些資源是內(nèi)隱(implicit)的,并且按照每個用戶,而不是每個可執(zhí)行程序來分配。因此,用戶意識不到可執(zhí)行程序中的惡意程序會威脅他們的文件,網(wǎng)絡(luò)上的其他計算機,以及某些周邊系統(tǒng)文件。以上描述的幾個問題方面可以存在于在操作系統(tǒng)層次執(zhí)行的應(yīng)用程序管理系統(tǒng)來說。然而,對于SunMicrosystems開發(fā)的Java技術(shù)則稍有不同。Java技術(shù)是“一個產(chǎn)品組合,其基于網(wǎng)絡(luò)的力量和同一軟件應(yīng)該可以在各種類型系統(tǒng)和裝置上運行的創(chuàng)意”(引自http://java.sun.com/),并且2.0版的Java2MicroEdition(J2ME)MobileInformationDeviceProfile(MIDP),其提出了管理應(yīng)用程序的這種理念。傳統(tǒng)的應(yīng)用程序一旦加載就比較自治,并且主要基于用戶輸入來管理其生命周期。然而,受管理的應(yīng)用程序一直處于底層操作系統(tǒng)的控制之下,操作系統(tǒng)可以刮起或恢復其操作,或者甚至完全殺死一個應(yīng)用程序。要求將AMS安裝于計算裝置上,這是J2MEMIDP2.0的一個特殊要求。Sun定義AMS是“裝置中負責每個應(yīng)用程序生命周期(安裝、激活、執(zhí)行、卸載)的軟件”。在http://sun.systemnews.com/articles/56/3/ja7939中可以找到關(guān)于J2ME中的應(yīng)用程序管理的簡介,其描述了四個應(yīng)用程序模式。這些模式包括傳統(tǒng)的無管理應(yīng)用程序、由網(wǎng)絡(luò)瀏覽器管理的小應(yīng)用程序(applet)、midlet、以及xlet。其中的后面兩種,midlet和xlet,是由AMS管理。關(guān)于J2MWAMS實例在實踐中實現(xiàn)要求的方式的例子,請見http://www-106.ibm.com/developerworks/library/wiamspalm/?ca=dgr-Inxw03AMS,其中描述了PalmIncofUSA的PalmOSTM上的一個實例??梢哉J為,底層OS的JavaAMS所產(chǎn)生的這些要求以及OS應(yīng)用程序管理系統(tǒng)對于上述的各種困難提供了部分解決方案;即●對于應(yīng)用程序的擁有的OS層資源管理(例如推出(pull)連接和警告),其生命周期擴展到了超過了正在運行的應(yīng)用程序的生命周期。●對于OS層資源在應(yīng)用程序安裝時擁有的應(yīng)用程序的實例化?!駥τ诙鄳?yīng)用程序啟動方法的管理(例如用戶激活、連接激活和警告激活)。然而,JavaAMS只能夠管理兩種應(yīng)用程序模式(midlet和xlet)的完整生命周期。JavaAMS不能處理Javaapplet(其必須由網(wǎng)絡(luò)瀏覽器管理)或不受管理的Java應(yīng)用程序。尤其是,根本不能管理非Java應(yīng)用程序。即使是Java應(yīng)用程序,如果其是在所提供的AMS之外安裝的,那么也將無法完全管理。如PalmOSTM早前所確認的,JavaAMS能識別“僅由其本身所安裝的MIDlet,而不包括那些由其他方式傳送到該裝置上的MIDlet”。因此,盡管在J2MEMIDP規(guī)范中描述的JavaAMS系統(tǒng)部分地解決了上述的一些問題,但其具有嚴重缺陷,其僅能管理特定類型的J2ME受管理應(yīng)用程序,另外,這些應(yīng)用程序必須是通過J2ME本身下載和安裝的。對于Java是在開放OS的頂層執(zhí)行的情況,該方法顯然不適用,因為該方法允許本地應(yīng)用程序變成不受管理。
發(fā)明內(nèi)容因此,本發(fā)明的一個目的在于提供一種改進的解決方案,通過集中管理至少以下內(nèi)容來解決上述的問題●全部的應(yīng)用程序生命周期(安裝、加載、各種執(zhí)行階段、結(jié)束、以及卸載)●應(yīng)用程序權(quán)能(capability)(例如,基于MIME類型)●長壽OS層應(yīng)用程序擁有的資源(例如,推出連接或計劃表時間和警告,其可關(guān)聯(lián)至特定可執(zhí)行程序)●安全性。另外,本方法不僅還能對所有類型的本地應(yīng)用程序?qū)崿F(xiàn)上述要求,而且還能對屬于其他受管理的或不受管理的子系統(tǒng)的應(yīng)用程序?qū)崿F(xiàn)上述要求,其包括但不限于Java應(yīng)用程序,解釋型應(yīng)用程序例如Perl或Basic腳本,以及適應(yīng)駐留不同應(yīng)用環(huán)境例如J2MEAMS或Qualcomm的BREW(BinaryRuntimeEnvironmentForWireless無線二進制運行時環(huán)境)的應(yīng)用程序。這些環(huán)境對于本領(lǐng)域技術(shù)人員來說應(yīng)該是公知的,因此本申請文件上下文中對此不再贅述。因此,根據(jù)本發(fā)明的第一方面,提供了一種管理計算裝置上的用戶應(yīng)用程序的應(yīng)用程序生命周期的方法,該方法包括提供用于管理多種應(yīng)用程序模式和多種應(yīng)用程序環(huán)境的應(yīng)用程序管理系統(tǒng)(AMS),其中,AMS作為計算裝置的操作系統(tǒng)內(nèi)的部件來實現(xiàn),并許可操作系統(tǒng)控制該裝置上的所有應(yīng)用程序管理功能。根據(jù)本發(fā)明的第二方面,提供了一種計算裝置,用于根據(jù)第一方面的方法來運行。根據(jù)本發(fā)明的的三方面,提供了一種用于計算裝置的操作系統(tǒng),用于使計算裝置根據(jù)第一方面的方法來運行。
發(fā)明內(nèi)容下面將參照附圖描述本發(fā)明的實施例,這些實施例僅作為舉例,在附圖中圖1示出了根據(jù)本發(fā)明的應(yīng)用程序管理系統(tǒng)(AMS)的整體結(jié)構(gòu);以及圖2示出了圖1所示的AMS的應(yīng)用程序接口。具體實施例方式下面參考常規(guī)AMSOS服務(wù)描述本發(fā)明的實施例,該常規(guī)AMSOS服務(wù)通過維護以下內(nèi)容管理應(yīng)用程序●已安裝程序的注冊●所有在運行應(yīng)用程序的狀態(tài)●操作系統(tǒng)資源另外,下面描述的該方法是可擴展的;可將其他子系統(tǒng)附加至該結(jié)構(gòu)。下面描述的優(yōu)選實施例示出了如何實現(xiàn)對本地應(yīng)用程序和使用SumbianOSTM操作系統(tǒng)(來自于SymbianSoftwareLtd.的用于移動計算裝置的先進操作系統(tǒng))的計算裝置上的Java應(yīng)用程序?qū)崿F(xiàn)常規(guī)AMS系統(tǒng)。然而,本領(lǐng)域技術(shù)人員應(yīng)該明白,該實施例也可用于其他操作系統(tǒng),以及其他類型的計算裝置。另外,這里對本方法管理Java應(yīng)用程序的披露將使本領(lǐng)域技術(shù)人員明白,如何對其他非本地子系統(tǒng)應(yīng)用本方法,可以單獨應(yīng)用也可結(jié)合應(yīng)用。本發(fā)明的該實施例中使用SymbianOSTM操作系統(tǒng)和Java僅僅是為了舉例說明的目的,并不是要限定本發(fā)明的應(yīng)用范圍。首先來概述AMS的結(jié)構(gòu)。在此處所給出的優(yōu)選實例中,AMS服務(wù)提供多層功能,包括從基于應(yīng)用程序信息存儲器的前臺、“殼”應(yīng)用程序,到后臺RDBMS(RelationalDatabaseManagementSystem,關(guān)系型數(shù)據(jù)庫管理系統(tǒng))。圖1示出了AMS各部件的整體結(jié)構(gòu)。從圖1可以看到,本地應(yīng)用程序和非本地子系統(tǒng)(這里表示為在Java虛擬機(JavaVirtualMachine,縮寫為JVM)中運行的Java應(yīng)用程序)具有C++應(yīng)用程序接口(API),其提供了對AMS內(nèi)公用功能的訪問通道,例如AmsListenerSupport、Installerserver(安裝機服務(wù)程序)、Executionserver(執(zhí)行服務(wù)程序)。從圖2可以看到,該API由本地應(yīng)用程序直接訪問。然而,非本地子系統(tǒng)中的應(yīng)用程序如果不能訪問本地操作系統(tǒng)方法的話,則必須具有隔離層(insulationlayer),非本地子系統(tǒng)中的應(yīng)用程序殼通過隔離層通信。因此,圖1中所示的非本地Java應(yīng)用程序通過提供JavaAPI和Java本地接口(JavaNativeInterface,縮寫為JNI)實現(xiàn)AMS功能。同樣地,圖1中未示出的其他非本地應(yīng)用程序環(huán)境將會要求提供其自己的隔離層。圖1中所示C++API用于和系統(tǒng)AMS服務(wù)通信。優(yōu)選的,采用客戶機/服務(wù)程序結(jié)構(gòu),這是因為存在各種可能類型的應(yīng)用程序,這些應(yīng)用程序都必須和單獨的AMS服務(wù)通信。該結(jié)構(gòu)中主要有兩組類Installerclient/server(安裝器客戶機/服務(wù)程序)類,其處理單實例安裝和卸載事件以及過程(procedure);Executionclient/server(執(zhí)行程序客戶機/服務(wù)程序)類,其處理涉及應(yīng)用程序加載、運行和結(jié)束的每個實例的多實例事件和過程。提供事件通知的Listener(監(jiān)聽程序)類提供Installer和Execution類。其確切機制可以有變化;例如,召回(callback)或發(fā)布且簽訂(publish-and-subscribe)都是合適的機制。對于本領(lǐng)域技術(shù)人員而言,其他機制也是顯而易見的。使用進程間通信(InterProcessCommunication,縮寫為IPC)來執(zhí)行AMS服務(wù)與應(yīng)用程序進程之間的消息交換。AMS服務(wù)通過以下幾種方式與影響應(yīng)用程序進程●首先,為AMS應(yīng)用程序開發(fā)提供API。針對授予它們的安全性許可,應(yīng)用程序可執(zhí)行(但不限于)以下任務(wù)安裝和卸載應(yīng)用程序,監(jiān)聽已安裝應(yīng)用程序,監(jiān)聽在運行應(yīng)用程序,查詢應(yīng)用程序信息,運行和關(guān)閉應(yīng)用程序,以及將它們發(fā)送至后臺或者將其帶到前臺?!衿浯?,AMS與受管理應(yīng)用程序進程交互??梢笫芄芾響?yīng)用程序關(guān)閉或終止響應(yīng)AMSAPI調(diào)用或前臺操作系統(tǒng)層事件。應(yīng)用程序還可請求或者釋放操作系統(tǒng)層應(yīng)用程序擁有的資源,例如推出連接?!竦谌?,AMS提供通知事件。針對授予它們的安全性許可,應(yīng)用程序可要求AMS事件的通知例如生命周期狀態(tài)改變,其包括(但不限于)○已安裝○已卸載○已啟動○已掛起○已恢復○已停止除了給程序留下終止執(zhí)行(退出)的權(quán)能之外,AMS還提供用于觸發(fā)應(yīng)用程序生命周期狀態(tài)改變的唯一方法。因此,AMS是為用于裝置上的可執(zhí)行程序的安裝、卸載和激活的唯一可行方法。AMS的這種應(yīng)用程序模式非常靈活,且非常易擴展。該AMS結(jié)構(gòu)由多層(tier)構(gòu)成。在最高層,用戶通過常見系統(tǒng)例如安裝器(其用于增加或卸載用戶應(yīng)用程序)和桌面(其使用戶能夠選取和啟動應(yīng)用程序)與AMS交互。在該最高層之下,AMS提供一組公用API,其對要求的影響生命周期狀態(tài)改變的功能提供受控訪問,其包括查詢已分配許可或者請求更多的許可。在最底層,AMS模式與執(zhí)行必要任務(wù)的操作系統(tǒng)內(nèi)核交互。AMS還要求對用于數(shù)據(jù)長期保存的非易失性存儲器的訪問;出于此目的,SymbianOSTM操作系統(tǒng)實例使用RDBMS后臺。從圖1可以看到這樣一個實例。該優(yōu)選形式的應(yīng)用程序模式限定了一組支持各種應(yīng)用程序模式所必須得接口。圖2中示出了該AMS結(jié)構(gòu)及有關(guān)應(yīng)用程序接口的圖表。下面的實施例詳細列出了圖2中所示的公用類。另外,這些類演示了怎樣提供一種用于處理各種應(yīng)用程序模式的對象模式的公用接口(例如,J2MEMIDP和本地應(yīng)用程序)如前面所述,這種頂層抽象區(qū)別了Executable(可執(zhí)行)和Installable(可安裝)。ApplicationRepresentationObject(應(yīng)用程序表現(xiàn)對象,ARO)類通過擴展現(xiàn)有的AppInfo類,并執(zhí)行Executable和Installable方法來構(gòu)造。如有必要,這些可成對地實現(xiàn)也可單個地實現(xiàn)。例如,可見圖2,MIDletInfo類標題僅執(zhí)行Executable類方法,MIDletSuiteInfo類標題僅執(zhí)行Installable方法,而NativeAppInfo類標題執(zhí)行Executable和Installable類方法。Executable與Installable接口限定了AMS獲取特定的AppExecutor和AppInstaller對象的方法,AppExecutor和AppInstaller對象用于執(zhí)行實際的安裝或執(zhí)行。每個Executable和Installable實例通常具有對應(yīng)的AppExecutor或AppInstaller實例。前面也已經(jīng)描述了Listener類也用于與AMS交互這些類包括ExecutorListner和InstallerListener??捎肊xecutor或Installer登記執(zhí)行這些接口的類的對象,以獲取相應(yīng)的通知。圖2中的AmsUI示出了AMS交互,例如命令或進程對話被抽象成高層接口。值得注意的是,集中到該AMS接口的這兩個類是Executor和Installer。這兩個類限定了AMS任務(wù),通過委任相應(yīng)的實例到已登記的AppExecutor和AppInstaller類方法來實現(xiàn)它們。需要對非本地應(yīng)用程序環(huán)境限定合適的方法。圖2示出了怎樣借助于JavaInstaller和JavaExecutor類來實現(xiàn)這一點的一個實例。值得注意的是,非本地應(yīng)用程序環(huán)境還需要源自來自于AppInfo的合適的類;圖2也示出了對于JavaMidlet如何能實現(xiàn)這一點。關(guān)于安全性,實現(xiàn)單一集中的應(yīng)用程序管理實體有助于每個可執(zhí)行程序許可的一致安裝時間(installation-time)分配。這種方法允許采用基于可執(zhí)行模式的許可(或權(quán)能),例如在題為“SecureMobileWirelessDevice”的專利申請GB0312191.0中所披露的平臺安全模式。本領(lǐng)域技術(shù)人員應(yīng)該明白,這種高度控制的環(huán)境與更常規(guī)的AMS模式完全相反。通常,基于應(yīng)用程序所給出的憑證(證書),許可或權(quán)能在安裝期間進行分配。這些許可然后由AMS堅持,并使得可由執(zhí)行(實時)環(huán)境獲取。應(yīng)用于上述實施例,在J2MEMIDP2環(huán)境中,許可和實施可直接對應(yīng)于J2MEMIDP2安全模式。對于本地應(yīng)用程序,安裝可涉及該應(yīng)用程序所要求權(quán)能的驗證。在這兩種情況下,執(zhí)行時間許可/權(quán)能檢查是實時模式及相關(guān)API的內(nèi)建特征。下面將提供根據(jù)本發(fā)明的一個AMS結(jié)構(gòu)實現(xiàn)的實例。本領(lǐng)域技術(shù)人員應(yīng)該很容易理解下面實例中所用的術(shù)語,因此本文上下文中不再贅述。從圖2中,可以看到AMS結(jié)構(gòu)包括6個接口,這些接口的函數(shù)如下涉及這些接口的類如下AMS中使用的類的詳述和函數(shù)如下類AmsEventJava.lang.Object|+--.AmsEvent公共類AmsEvent擴展java.lang.ObjectAmsEvent用于在應(yīng)用程序管理API和應(yīng)用程序之間傳送消息。應(yīng)用程序?qū)⑼ǔ@冒惭b器(installer)或執(zhí)行器(executor)類來注冊其監(jiān)聽程序已接受諸如應(yīng)用程序被安裝或運行的事件通知。EVENT_APP_INSTALLEDPublicstaticfinalintEVENT_APP_INSTALLED定義用于應(yīng)用程序安裝事件的事件類型。EVENT_APP_UPDATEDPublicstaticfinalintEVENT_APP_UPDATED定義用于應(yīng)用程序更新事件的事件類型。EVENT_APP_REMOVEDPublicstaticfinalintEVENT_APP_REMOVED定義用于應(yīng)用程序刪除事件的事件類型。EVENT_APP_STARTEDPublicstaticfinalintEVENT_APP_STARTED定義用于應(yīng)用程序啟動事件的事件類型。EVENT_APP_STOPPEDPublicstaticfinalintEVENT_APP_STOPPED定義用于應(yīng)用程序停止事件的事件類型。EVENT_EXE_ADDEDPublicstaticfinalintEVENT_EXE_ADDED定義用于可執(zhí)行添加事件的事件類型。EVENT_EXE_REMOVEDPublicstaticfinalintEVENT_EXE_REMOVED定義用于可執(zhí)行刪除事件的事件類型。APP_JAVA_MIDLETPublicstaticfinalintAPP_JAVA_MIDLET定義用于javaMIDlets的應(yīng)用程序類型。APP_NATIVE_APPPublicstaticfinalintAPP_NATIVE_APP定義用于本地應(yīng)用程序的應(yīng)用程序類型。getAppld1publicstaticintgetAppld1()返回主要應(yīng)用程序ID。對于MIDlets,其對應(yīng)于MIDlet套件ID。對于本地應(yīng)用程序,其為應(yīng)用程序ID。返回應(yīng)用程序ID。getAppld2publicstaticintgetAppld2()返回次要應(yīng)用程序ID。對于MIDlets,其對應(yīng)于MIDletID。對于本地應(yīng)用程序,該值可以被忽略。返回次要應(yīng)用程序ID。getAppTypepublicstaticintgetAppType()返回該事件的應(yīng)用程序類型。返回該事件的應(yīng)用程序類型。getEventTypepublicstaticintgetEventType()返回該事件的事件類型。返回該事件的事件類型。getInfopublicAppInfogetInfo()獲得用于與該事件有關(guān)的應(yīng)用程序的應(yīng)用程序描述符。返回用于與該事件有關(guān)的應(yīng)用程序的應(yīng)用程序描述符。類AMSExceptionJava.lang.Object|+--.java.lang.Throwable|+--.java.lang.Exception|+--.AMSException所有實現(xiàn)的接口java.io.Serializable公共類AMSException擴展java.lang.Exception通告應(yīng)用程序管理錯誤。AMSExceptionPublicAMSException(java.lang.StringaMessage)利用指定的消息創(chuàng)建新的AMSException。參數(shù)aMessage-消息串接口AmsUI公共接口AmsUIAmsUI接口允許應(yīng)用程序定制AMS需要的查詢、信息、警告以及錯誤消息的顯示。典型的實施例將通過檢查查詢類型、添加選項以及然后顯示對話來實現(xiàn)查詢。該接口可以被擴展以允許生成定制對話(諸如安裝改進)OPT_YESPublicstaticfinalintOPT_YES定義YES選項。該值用作查詢方法中的參數(shù)和返回值。OPT_OKPublicstaticfinalintOPT_OK定義OK選項。該值用作查詢方法中的參數(shù)和返回值。OPT_NOPublicstaticfinalintOPT_NO定義NO選項。該值用作查詢方法中的參數(shù)和返回值。OPT_CANCELPublicstaticfinalintOPT_CANCEL定義CANCEL選項。該值用作查詢方法中的參數(shù)和返回值。QUERYPublicstaticfinalintQUERY定義QUERY會話類型。INFOPublicstaticfinalintINFO定義INFO會話類型。WARNINGPublicstaticfinalintWARNING定義WARNING會話類型。ERRORPublicstaticfinalintERROR定義ERROR會話類型。querypublicintquery(intaType,intaOptions,java.lang.StringaQueryString)為用戶呈現(xiàn)消息或查詢。該方法是同步的,并且只在查詢對話關(guān)閉時返回。參數(shù)aType-QUERY,INFO,WARNING,ERROR之一aOptions-或OPT_YES,OPT_OK,OPT_NO,OPT_CANCEL的組合aQueryString-呈現(xiàn)給用戶的字串。返回基于用戶的響應(yīng),返回值為OPT_YES,OPT_OK,OPT_NO,OPT_CANCEL中的一個。類AppInfoJava.lang.Object|+--.AppInfo直接得知子類MIDletInfo,MIDletSuiteInfo,NativeAppInfoPublicabstractclassAPPInfo擴展java.lang.ObjectAppInfo是通用應(yīng)用程序描述符類。EJFAMS架構(gòu)支持本地應(yīng)用程序和JavaMIDlets。這兩種應(yīng)用程序類型在其安裝和管理方面非常不同。此外,JavaMIDP說明具有將MIDlets作為可運行的應(yīng)用程序以及MIDlet套件作為可安裝的應(yīng)用程序套件的概念。實際上,一個可以只運行MIDlets,并且可以只安裝/卸載MIDlet套件。本地應(yīng)用程序有點更簡單,這是由于它們在安裝和執(zhí)行時都是最小的(atom)。作為用于所有應(yīng)用程序的抽象基類,AppInfo是否可以被安裝和運行是不可知的。由于以不同的方式完成不同應(yīng)用程序類型的安裝和執(zhí)行,因此這項工作被授予了應(yīng)用程序類型具體實施者。STOPPEDPublicstaticfinalintSTOPPED表示除了RUNNING以外的所有應(yīng)用程序狀態(tài)的常量。RUNNINGPublicstaticfinalintRUNNING應(yīng)用程序生命周期中對應(yīng)于RUNNING狀態(tài)的常量。AppInfopublicAppInfo()getNamepublicabstractjava.lang.StringgetName()獲得應(yīng)用程序名稱。返回應(yīng)用程序名稱。getIconpublicabstractjava.lang.StringgetIcon()獲得應(yīng)用程序圖標。返回應(yīng)用程序圖標getStatepublicabstractintgetState()獲得應(yīng)用程序狀態(tài)。返回應(yīng)用程序狀態(tài)。getPropertypublicabstractjava.lang.StringgetProperty(java.lang.StringaPropertyName)得到應(yīng)用程序?qū)傩?。參?shù)aPropertyName-查詢屬性。返回如果存在返回需要的應(yīng)用程序?qū)傩?,否則返回空。接口Downloader所有已知的實現(xiàn)類JavaDownloader公共接口Downloader用于安裝的下載能力的抽象允許定制下載機制。例如,特定的下載機可以用于將實現(xiàn)OTA需要的OTA安裝。downloadpublicjava.lang.Stringdownload(java.lang.StringaUri,java.lang.StringaReferrer)通告AMSException下載URI內(nèi)容并返回下載的文件的路徑.URI可以是相對的或絕對的。但提供了相對的URI時,來源頁面地址參數(shù)用于獲得完整的URL。參數(shù)aUri-相對或絕對URIaReferrer-如果Uri是相對的,來源頁面地址用于獲得基URI返回下載的文件的路徑拋出AMSException-如果出現(xiàn)錯誤可執(zhí)行接口(interfaceexecutable)所有已知的實現(xiàn)類MIDletInfo,NativeAppInfo公共可執(zhí)行接口所有可執(zhí)行應(yīng)用程序的公共接口getInstallablepublicInstallablegetInstallable()得到與該應(yīng)用程序相關(guān)的可安裝。返回該可執(zhí)行的父級可安裝。getExecutableAppInfopublicAppInfogetExecutableAppInfo()得到用于該可執(zhí)行程序的AppInfo。返回包括關(guān)于該可執(zhí)行的信息的AppInfo對象。類ExecutorJava.lang.Object|+--.Executor公共類Executor擴展java.lang.Object該執(zhí)行器類能夠執(zhí)行啟動、停止查詢當前可得到的應(yīng)用程序和運行應(yīng)用程序之間的切換。setUiHandlerpublicstaticvoidSetUiHandler(AmsUIaUI)設(shè)置用于用戶交互的UI。注意,查詢是單播的,即,在同一VM中不能注冊有多個UI處理機。將UI處理機設(shè)置為無效使不能進行UI查詢并且響應(yīng)所有的查詢的被認為使OPT_YES|OPT_OK。參數(shù)aUI-將被用于用戶交互的AmsUI實例。addListenerpublicstaticvoidaddListener(ExecutorListeneraListener)注冊監(jiān)聽程序。參數(shù)aListener-添加監(jiān)聽程序。通告java.lang.IllegalArgumentException-如果提供的參數(shù)無效。removeListenerpublicstatic_booleanremoveListener(ExecutorlisteneraListener)解除注冊監(jiān)聽程序。參數(shù)aListener-刪除的監(jiān)聽程序。返回如果需要的監(jiān)聽程序是注冊的則返回真,否則返回假。通告java.lang.IllegalArgumentException-如果提供的參數(shù)無效。listRunningpublicstatic_java.util.EnumerationlistRunning()通告AMSException返回運行應(yīng)用程序的列表。返回表示當前運行應(yīng)用程序的可執(zhí)行對象的枚舉。AMSExceptionlistExecutablespublicstatic_java.util.EnumerationlistExecutables()通告AMSException返回可執(zhí)行應(yīng)用程序的列表。返回可執(zhí)行對象的枚舉。AMSExceptionclosepublicStaticvoidclose(ExecutableaExecutable)通告AMSException停止當前運行的可執(zhí)行。參數(shù)aExecutable-停止可執(zhí)行。通告如果出現(xiàn)錯誤,通告AMSExceptionrefreshpublicStaticvoidrefresh()清除任何緩存數(shù)據(jù)。需要時得到新的數(shù)據(jù)副本。executepublicStaticvoidexecute(ExecutableaExecutable)通告AMSException運行可執(zhí)行。參數(shù)aExecutable-執(zhí)行可執(zhí)行通告如果出現(xiàn)錯誤,通告AMSExceptionswitchTopublicStaticvoidswitchTo(ExecutableaExecutable)通告AMSException切換至已經(jīng)運行的應(yīng)用程序。參數(shù)aExecutable-執(zhí)行可執(zhí)行通告如果出現(xiàn)錯誤,通告AMSExceptionrunSystempublicStaticvoidrunSystem()通告AMSException使系統(tǒng)處于“發(fā)射”的視圖(view)。通告如果出現(xiàn)錯誤,通告AMSException。接口ExecutorListener公共接口ExecutorListenerExecutorListener接口定義了一套調(diào)用方法,這些方法允許AMS應(yīng)用程序了解外部對正在進行的處理的改變。該方面的一個簡單的實例是通知應(yīng)用程序在從操作解釋程序啟動之后已經(jīng)關(guān)閉。appStartedpublicvoidappStarted(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)啟動。參數(shù)aEvent-包括時間詳述的AmsEvent。appClosedpublicvoidappClosed(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)結(jié)束。參數(shù)aEvent-包括時間詳述的AmsEvent。appAddedpublicvoidappAdded(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)安裝。參數(shù)aEvent-包括時間詳述的AmsEvent。appRemovedpublicvoidappRemoved(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)刪除。參數(shù)aEvent-包括時間詳述的AmsEvent。類FileJava.lang.Object|+--.File公共類File擴展java.lang.Object最小文件類、存儲文件名、允許得到父級以及檢查文件是否是目錄。KEntryAttReadOnlyPublicstaticfinalintKEntryAttReadOnlyKEntryAttHiddenPublicstaticfinalintKEntryAttHiddenKEntryAttSystemPublicstaticfinalintKEntryAttSystemKEntryAttVolumePublicstaticfinalintKEntryAttVolumeKEntryAttDirPublicstaticfinalintKEntryADttirKEntryAttArchivePublicstaticfinalintKentryAttArchiveisDirectorypublicBooleanisDirectory()檢查該文件是否是目錄Return通告Java.lang.ExceptionisRootpublicBooleanisRoot()檢查該文件是否是目錄Return通告Java.lang.ExceptionisReadOnlypublicBooleanisReadOnly()檢查該文件是否是目錄Return通告Java.lang.ExceptionisHiddenpublicBooleanisHidden()檢查該文件是否是目錄Return通告Java.lang.ExceptionisSystempublicBooleanisSystem()檢查該文件是否是目錄Return通告Java.lang.ExceptiongetPathpublicjava.lang.StringgetPath()返回文件的全路徑,沒有文件名Return沒有文件名的文件的全路徑getNamepublicjava.lang.StringgetName()返回沒有路徑的文件或目錄的名稱Return沒有路徑的文件或目錄的名稱getAbsolutePathpublicjava.lang.StringgetAbsolutePath()返回文件的全路徑,包括文件名Return包括文件名的文件的全路徑類FileSystemjava.lang.Object|+--.FileSystemPublicclassFileSystemExtendsjava.lang.Object最小的、純粹的文件系統(tǒng)存取接口,允許列出當前驅(qū)動器、目錄內(nèi)容以及加載文件。FileSystemPublicFileSystem()listRootspublicstaticjava.util.EnumerationlistRoots()返回存在于裝置上的驅(qū)動器列表返回當前存在于裝置上的驅(qū)動器列表listFilespublicstaticjava.util.EnumerationlistFiles(java.lang.StringaDirectory)通告java.lang.Exception返回表示指定目錄中的所有文件的文件對象的枚舉參數(shù)aDirectory-將列出的目錄返回指定目錄中的所有文件的枚舉通告java.lang.Exception-如果參數(shù)不存在或不是目錄loadFilepublicstaticbyte[]loadFile(java.lang.StringaFile)通告java.io.IOException加載文件的內(nèi)容參數(shù)aFile-將加載的文件路徑通告java.io.IOException-如果出現(xiàn)IO錯誤可安裝的接口所有已知的實現(xiàn)類MIDletSuiteInfo,NativeAppInfo公共可安裝接口可安裝應(yīng)用程序的公共接口getExecutablespublicjava.util.EnumerationgetExecutables()列出與該可安裝有關(guān)的可執(zhí)行返回可執(zhí)行對象的枚舉getInstallableAppInfo()publicAppInfogetInstallableAppInfo()獲得表示該可安裝應(yīng)用程序的appInfo對象返回與該可安裝有關(guān)的AppInfo類InstallerJava.lang.Object|+--.Installer公共類Installer擴展java.lang.Object該安裝器提供用于安裝MIDlet套件核本地應(yīng)用程序的必需方法。setUiHandlerpublicstaticvoidsetUiHandler()(AmsUIaUI)設(shè)置用于用戶交互的UI。參數(shù)aUI-用于用戶交互的AmsUI實例addListenerpublicstaticvoidaddListener(InstallerListeneraListener)注冊監(jiān)聽程序參數(shù)aListener-監(jiān)聽程序注冊removeListenerpublicstaticBooleanremoveListener(InstallerListeneraListener)解除注冊監(jiān)聽程序參數(shù)aListener-監(jiān)聽程序解除注冊返回如果監(jiān)聽程序在本次調(diào)用時沒有注冊,該方法返回假,否則返回真。通告java.lang.IllegalArgumentException-如果提供的監(jiān)聽程序為空。listInstalledAppspublicstaticjava.util.EnumerationlistInstalledApps()通告AMSException列出安裝的應(yīng)用程序返回的列表將包含所有的本地應(yīng)用程序核MIDlet套件,但不包含單獨的MIDlets。返回可安裝對象的枚舉通告AMSException-如果出現(xiàn)錯誤InstallPublicstaticvoidinstall(java.lang.StringaFile)通告AMSException從文件安裝應(yīng)用程序該文件可以指向三種文件類型之一●jad-Java應(yīng)用程序描述符●jar-Java歸檔●zip-用于安裝本地應(yīng)用程序參數(shù)aFile-安裝文件通告AMSException-如果出現(xiàn)錯誤removepublicstaticvoidremove(InstallableaInstallable)通告AMSException卸載指定的應(yīng)用程序參數(shù)aInstallable-卸載可安裝的通告AMSException-如果出現(xiàn)錯誤refreshpublicstaticvoidrefresh()清除任何緩存數(shù)據(jù)。需要時獲得數(shù)據(jù)的新副本。updatepublicstaticvoidupdate(InstallableaInstallable)通告AMSException更新指定的應(yīng)用程序。參數(shù)aInstallable-更新可安裝的通告AMSException-如果出現(xiàn)錯誤接口InstallerListener公共接口InstallerListener通過實現(xiàn)該接口應(yīng)用程序可以訂閱應(yīng)用程序的安裝、更新核卸載的通知。典型的動作將刷新顯示安裝的應(yīng)用程序的用戶接口。appInstalledpublicvoidappInstalled(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)被安裝。參數(shù)aEvent-AmsEvent包含事件詳述。appUpdatedpublicvoidappUpdated(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)被更新。參數(shù)aEvent-AmsEvent包含事件詳述。appRemovedpublicvoidappRemoved(AmsEventaEvent)通知監(jiān)聽程序應(yīng)用程序已經(jīng)被刪除。參數(shù)aEvent-AmsEvent包含事件詳述。類JavaDownloaderjava.lang.Object|+--.JavaDownloader所有實現(xiàn)的接口Downloader公共類JavaDownloader擴展java.lang.Object實現(xiàn)Downloader允許從本地驅(qū)動器安裝的Downloader接口的簡單實現(xiàn)。JavaDownloaderPublicJavaDownloader()創(chuàng)建新的JavaDownloader。downloadpublicjava.lang.Stringdownload(java.lang.StringaUri,java.lang.StringaReferrer)通告AMSException返回安裝文件的路徑。如果aUri是相對的,則參考器(referrer)用于確定全文件路徑。Specifiedby接口Downloader中的download參數(shù)aUri-安裝文件的絕對或相對路徑aReferrer-如果aUri是相對的,aReferrer用于確定全文件路徑返回安裝文件的路徑。通告AMSException-如果出現(xiàn)錯誤類MIDletInfoJava.lang.Object|+--.AppInfo|+--.MIDletInfo所有實現(xiàn)的接口ExecutablePublicfinalclassMIDletInfo擴展AppInfo實現(xiàn)Executable保持基本MIDlet信息getNamepublicjava.lang.StringgetName()獲得MIDlet名稱。由類AppInfo中的getName指定返回MIDlet名稱getIconpublicjava.lang.StringgetIcon()獲得應(yīng)用程序圖標。由類AppInfo中的getIcon指定返回應(yīng)用程序圖標getPropertypublicjava.lang.StringgetProperty(java.lang.StringaPropertyName)實現(xiàn)AppInfo。由類AppInfo中的getProperty指定參數(shù)aPropertyName-查詢屬性名稱。返回在本地應(yīng)用程序不被支持時返回空。getExecutableAppInfopublicAppInfogetExecutableAppInfo()實現(xiàn)可執(zhí)行。由接口Executable中的getExecutableAppInfo指定返回參考該對象。getStatepublicintgetState()獲得MIDlet狀態(tài)。由類AppInfo中的getState指定返回MIDlet狀態(tài)。getMIDletSuiteInfopublicMIDletSuiteInfogetMIDletSuiteInfo()獲得封裝的MIDlet套件。返回封裝的MIDlet套件描述符對象。EqualspublicBooleanequals(java.lang.ObjectaOther)將該對象與其他對象進行比較。忽略(Overrides)類java.lang.Object中的equals類java.lang.Object中的equals參數(shù)aOther-比較的對象。返回如果提供的MIDletInfo對象屬于相同的MIDlet套件并且具有與該對象相同的MIDletID,返回真。getInstallablepublicInstallablegetInstallable()獲得包含該可執(zhí)行的可安裝。由接口Executable中的getInstallable指定。返回該可執(zhí)行的父級(parent)可執(zhí)行。getAppInfopublicAppInfogetAppInfo()返回該參考。該方法實現(xiàn)可執(zhí)行接口。返回該參考。類MIDletInfoJava.lang.Object|+--.AppInfo|+--.MIDletInfo所有實現(xiàn)的接口Executable(可執(zhí)行)publicfinalclassMIDletInfo擴展AppInfo實現(xiàn)Executable保持基本MIDlet信息。getNamepublicjava.lang.StringgetName()獲得MIDlet名稱。由類AppInfo中的getName指定返回MIDlet名稱getIconpublicjava.lang.StringgetIcon()獲得應(yīng)用程序圖標。由類AppInfo中的getIcon指定返回應(yīng)用程序圖標getPropertypublicjava.lang.StringgetProperty(java.lang.StringaPropertyName)實現(xiàn)AppInfo。由類AppInfo中的getProperty指定參數(shù)aPropertyName-查詢屬性名稱。返回在本地應(yīng)用程序不被支持時返回空。getExecutableAppInfopublicAppInfogetExecutableAppInfo()實現(xiàn)可執(zhí)行。由接口Executable中的getExecutableAppInfo指定返回參考該對象。getStatepublicintgetState()獲得MIDlet狀態(tài)。由類AppInfo中的getState指定返回MIDlet狀態(tài)。getMIDletSuiteInfopublicMIDletSuiteInfogetMIDletSuiteInfo()獲得封裝的MIDlet套件。返回封裝的MIDlet套件描述符對象。Equalspublicbooleanequals(java.lang.ObjectaOther)將該對象與其他對象進行比較。忽略(Overrides)類java.lang.Object中的equals類java.lang.Object中的equals參數(shù)aOther-比較的對象。返回如果提供的MIDletInfo對象屬于相同的MIDlet套件并且具有與該對象相同的MIDletID,返回真。getInstallablepublicInstallablegetInstallable()獲得包含該可執(zhí)行的可安裝。由接口Executable中的getInstallable指定。返回該可執(zhí)行的父級(parent)可執(zhí)行。getAppInfopublicAppInfogetAppInfo()返回該參考。該方法實現(xiàn)可執(zhí)行接口。返回該參考。ClassMIDletSuiteInfoJava.lang.Object|+--.AppInfo|+--.MIDletSuiteInfo所有實現(xiàn)的接口Installable(可安裝)公共類MIDletSuiteInfo擴展AppInfo實現(xiàn)Installable保持基本MIDletSuite信息。getNamepublicjava.lang.StringgetName()獲得MIDlet套件名稱。由類AppInfo中的getName指定返回MIDlet套件名稱。getIconpublicjava.lang.StringgetIcon()獲得應(yīng)用程序圖標。由類AppInfo中的getIcon指定返回應(yīng)用程序圖標getVendorpublicjava.lang.StringgetVendor()獲得MIDlet套件賣主。返回MIDlet套件賣主。getVersionpublicjava.lang.StringgetVersion()獲得MIDlet套件版本。返回MIDlet套件版本。getMIDletInfopublicMIDletInfo[]getMIDletInfo()獲得MIDlets。返回對應(yīng)于來自該MIDlet套件的MIDlets的MIDletInfo對象的數(shù)組。Equalspublicbooleanequals(java.lang.ObjectaOther)測試該MIDletSuiteInfo是否指的是與所提供的參數(shù)相同的MIDlet套件。忽略(Overrides)類java.lang.Object中的equals類java.lang.Object中的equals參數(shù)aOther-比較的對象。返回如果兩個MIDletSuiteInfo對象指的是相同的MIDlet套件返回真,否則返回假。getInstallableAppInfopublicAppInfogetInstallableAppInfo()實現(xiàn)可安裝。由接口Installable中的getInstallableAppInfo指定。返回該對象的參考。getExecutablespublicJava.util.EnumerationgetExecutables()實現(xiàn)可安裝。列出與該可安裝相關(guān)的可執(zhí)行。由接口Installable中的getExecutables指定。返回可執(zhí)行對象的枚舉。getPropertypublicjava.lang.StringgetProperty(java.lang.StringaPropertyName)實現(xiàn)AppInfo。由類AppInfo中的getProperty指定參數(shù)aPropertyName-查詢屬性名稱。返回在本地應(yīng)用程序不被支持時返回空。getStatepublicintgetState()獲得應(yīng)用程序狀態(tài)。由類AppInfo中的getState指定返回應(yīng)用程序狀態(tài)。類MRUCacheJava.lang.Object|+--.MRUCache公共類MRUCache擴展java.lang.Object最近使用的(MRU)對象緩存。MRUCache公共MRUCache()創(chuàng)建具有20項的最大尺寸的新緩存。MRUCache公共MRUCache(intaMaxEntries)創(chuàng)建具有指定的最大尺寸的新緩存。參數(shù)aMaxEntries-該緩存對象可以存儲的對象的最大數(shù)量。containsKeypublicbooleancontainsKey(java.lang.ObjectaKey)檢查緩存是否包含指定的密鑰。返回如果緩存中存在密鑰返回真。putpublicvoidput(java.lang.ObjectaKey,java.lang.ObjectaData)該方法通過將對象放置到列表的頂部來將該對象存儲在緩存中。如果對象在緩存中,將其提升到列表的頂部。如果對象不在緩存中,則將其添加到列表的頂部,然后檢查緩存的最大尺寸核新尺寸,來查看是否需要從緩存中刪除最后的元素。removepublicvoidremove(java.lang.ObjectaKey)getpublicjava.lang.Objectget(java.lang.ObjectaKey)將需要的項移動到緩存的前面。ClassNativeAppInfoJava.lang.Object|+--.AppInfo|+--.NativeAppInfo所有實現(xiàn)的接口Executable,Installable公共類NativeAppInfo擴展AppInfo實現(xiàn)Installable,ExecutableNativeAppInfo是本地應(yīng)用程序的描述符。getNamepublicjava.lang.StringgetName()獲得應(yīng)用程序名稱。由類AppInfo中的getName指定返回應(yīng)用程序名稱。getIconpublicjava.lang.StringgetIcon()獲得應(yīng)用程序圖標。由類AppInfo中的getIcon指定返回應(yīng)用程序圖標getStatepublicintgetState()獲得應(yīng)用程序狀態(tài)。由類AppInfo中的getState指定返回應(yīng)用程序狀態(tài)。還看AppInfo.STOPPED,AppInfo.RUNNINGgetExecutableAppInfopublicAppInfogetExecutableAppInfo()實現(xiàn)可執(zhí)行。由接口Executable中的getExecutableAppInfo指定返回參考該對象。getInstallablepublicInstallablegetInstallable()從Executable接口復制的描述獲得與該應(yīng)用程序有關(guān)的可安裝。由接口Executable中的getInstallable指定。返回該可執(zhí)行的父級可安裝。getInstallableAppInfopublicAppInfogetInstallableAppInfo()實現(xiàn)可安裝。由接口Installable中的getInstallableAppInfo指定。返回該對象的參考。getExecutablespublicJava.util.EnumerationgetExecutables()實現(xiàn)可安裝。列出與該可安裝相關(guān)的可執(zhí)行。由接口Installable中的getExecutables指定。返回可執(zhí)行對象的枚舉。getPropertypublicjava.lang.StringgetProperty(java.lang.StringaPropertyName)實現(xiàn)AppInfo。由類AppInfo中的getProperty指定參數(shù)aPropertyName-查詢屬性。返回在本地應(yīng)用程序不被支持時返回空。從上述實施例可以看出,本發(fā)明披露了一種方法,用于提供一種單操作系統(tǒng)方法,可集中管理●應(yīng)用程序生命周期(包括安裝、執(zhí)行狀態(tài)、卸載)●應(yīng)用程序權(quán)能●長壽OS層應(yīng)用程序擁有的資源(例如,推出連接、警告)●安全性因此,可以認為本發(fā)明相對于現(xiàn)有應(yīng)用程序的管理方法提供了以下優(yōu)點,包括●全部應(yīng)用程序生命周期(包括安裝、執(zhí)行、終止和卸載的所有階段)都由單個統(tǒng)一的AMS實體管理。●該統(tǒng)一的AMS支持應(yīng)用程序擁有的OS層資源(例如連接和警告),其生命周期擴展到超過應(yīng)用程序執(zhí)行的生命周期。●該統(tǒng)一的AMS易于修改和擴展任何應(yīng)用程序類型。●該統(tǒng)一的AMS支持多個執(zhí)行模式和多個執(zhí)行子系統(tǒng)。●該統(tǒng)一的AMS易于修改和擴展任何新執(zhí)行模式和子系統(tǒng)。●單一應(yīng)用程序管理系統(tǒng)能夠處理(例如)本地應(yīng)用程序、Java應(yīng)用程序、BREW應(yīng)用程序和Appforge風格的VisualBasic應(yīng)用程序?!裨揂MS是對安裝和運行所有類型的可執(zhí)行程序具有壟斷性的操作系統(tǒng)服務(wù);這使得可對整個系統(tǒng)執(zhí)行公用的安全策略。盡管上文參照具體實施例描述了本發(fā)明,應(yīng)該明白的是,可以進行修改,而仍然落入所附權(quán)利要求書所限定的本發(fā)明范圍。權(quán)利要求1.一種用于管理計算裝置上的用戶應(yīng)用程序的應(yīng)用程序生命周期的方法,所述方法包括提供用于管理多種應(yīng)用程序模式和多種應(yīng)用程序環(huán)境的應(yīng)用程序管理系統(tǒng)(AMS),其中,所述AMS作為所述計算裝置的操作系統(tǒng)內(nèi)的組件來實現(xiàn),并授權(quán)所述操作系統(tǒng)控制所述裝置上的所有應(yīng)用程序管理功能。2.根據(jù)權(quán)利要求1所述的方法,其中,所述用戶應(yīng)用程序包括以下任一種或多種,或其組合a.本地應(yīng)用程序,其直接與所述裝置上的所述操作系統(tǒng)交互;b.任何類型的Java應(yīng)用程序,包括但不限于不受管理的應(yīng)用程序、midlet、applet和xlet,其與Java虛擬機交互;c.被設(shè)計用于BREW應(yīng)用程序環(huán)境的應(yīng)用程序;d.被設(shè)計通過語言解釋器運行的應(yīng)用程序,包括但不限于Fortran、Forth、Lisp、BASIC、VisualBasic或Perl;e.被設(shè)計用于在Web瀏覽器內(nèi)運行的應(yīng)用程序;f.用中間碼編寫的應(yīng)用程序,例如用pCode編寫的Pascal應(yīng)用程序;g.用機器碼編寫的應(yīng)用程序,所述機器碼用于處理器或所述裝置中的處理器;或者h.被設(shè)計用于在所述裝置上在任何其他應(yīng)用程序模式和/或運行時子系統(tǒng)下運行的任何形式的程序。3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述AMS可擴展用于允許支持增加其他應(yīng)用程序模式和/或運行時子系統(tǒng)。4.根據(jù)權(quán)利要求1至3任一項所述的方法,其中,所述應(yīng)用程序生命周期包括以下任一種或多種,或其組合a.應(yīng)用程序的安裝;b.應(yīng)用程序的加載;c.應(yīng)用程序的執(zhí)行;d.應(yīng)用程序的掛起;e.應(yīng)用程序的恢復;f.應(yīng)用程序的終止;g.應(yīng)用程序的刪除或卸載;h.應(yīng)用程序的任何其他生命周期操作。5.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS管理操作系統(tǒng)或由任何用戶應(yīng)用程序所擁有或涉及的硬件資源。6.根據(jù)權(quán)利要求5所述的方法,其中,所述AMS可以根據(jù)操作系統(tǒng)或由任何用戶應(yīng)用程序所擁有或涉及的硬件資源的狀態(tài)中變化,而改變?nèi)魏螒?yīng)用程序的生命周期狀態(tài)。7.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS用于管理任何應(yīng)用程序的生命周期屬性。8.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS保存以下任一項或全部的記錄a.當前安裝于所述裝置上所有應(yīng)用程序;b.所有在運行的應(yīng)用程序的狀態(tài);c.操作系統(tǒng)資源;d.硬件資源;e.一組硬件和/或操作系統(tǒng)資源到資源相關(guān)事件、應(yīng)用程序、應(yīng)用程序狀態(tài)、和動作的映射。9.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS包括服務(wù)程序,多個應(yīng)用程序可以作為客戶機連接至所述服務(wù)程序。10.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,可以由所述AMS各自地管理應(yīng)用程序的多個實例。11.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,第一組函數(shù)處理關(guān)于所有應(yīng)用程序的安裝和卸載的應(yīng)用程序狀態(tài);另一組函數(shù)處理關(guān)于所有應(yīng)用程序的每個實例的執(zhí)行的應(yīng)用程序狀態(tài)。12.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,一組或多組AMS監(jiān)聽程序函數(shù)向應(yīng)用程序提供事件通知。13.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS包括分層結(jié)構(gòu),所述分層結(jié)構(gòu)包括公共API,其提供對生命周期和資源管理所需功能的訪問。14.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,用于不能直接訪問本地AMSAPI的所有應(yīng)用程序或可執(zhí)行程序的應(yīng)用程序子系統(tǒng)或運行環(huán)境提供一組隔離層,其使能這種應(yīng)用程序。15.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS的任意部分所采取的動作由分配給系統(tǒng)或用戶應(yīng)用程序的安全屬性所修改。16.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述AMS的任意部分所采取的動作由分配給所述裝置的當前用戶的所述安全屬性所修改。17.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,在所述裝置上安裝或執(zhí)行任何類型的可執(zhí)行代碼受限于所述AMS的使用。18.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述用戶應(yīng)用程序包括可執(zhí)行代碼的所有獨立可安裝項例如庫或提供擴展功能的插件,而不論這些項是否可單獨執(zhí)行。19.根據(jù)前述權(quán)利要求中任一項所述的方法,其中,所述用戶應(yīng)用程序包括影響任何應(yīng)用程序的運行的所有獨立可安裝數(shù)據(jù)集。20.一種計算裝置,用于根據(jù)權(quán)利要求1至19中任一項所述的方法運行。21.一種操作系統(tǒng),用于使計算裝置根據(jù)權(quán)利要求1至19中任一項所述的方法運行。全文摘要本發(fā)明提供了一種用于管理計算裝置上的用戶應(yīng)用程序的應(yīng)用程序生命周期的方法。該方法可以集中地管理各種應(yīng)用程序的●應(yīng)用程序生命周期(包括安裝、執(zhí)行狀態(tài)、卸載)●應(yīng)用程序權(quán)能●長壽OS層應(yīng)用程序擁有的資源(例如,推出連接、警告)●安全性,而無論應(yīng)用程序類型或模式或執(zhí)行環(huán)境。文檔編號G06F9/445GK101095111SQ200580045595公開日2007年12月26日申請日期2005年12月15日優(yōu)先權(quán)日2004年12月15日發(fā)明者西蒙·劉易斯,伊萬·利托夫斯基申請人:西姆畢恩軟件有限公司