更新應用程序的方法及裝置制造方法
【專利摘要】本公開實施例提供了更新應用程序的方法及裝置,其中的方法包括:獲取終端設備處理器的核數;根據所述核數在第一語言環境下開啟多個更新線程;在每個更新線程中,通過預設的接口調用由第二語言實現的更新函數以對第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從第一列表移至第二列表;在收到一個更新線程對一個應用程序更新完成的響應后,將更新完成的應用程序從第二列表中移除。本公開中使用預設的接口例如JNI接口,使一種語言下的更新線程可以直接調用另一種語言下的更新函數,不但避免了因建立socket連接而導致的時間及系統資源消耗,且可同時進行多線程更新,大大提高了應用程序同時需要更新時的更新效率。
【專利說明】更新應用程序的方法及裝置
【技術領域】
[0001] 本公開涉及終端設備程序處理【技術領域】,尤其涉及更新應用程序的方法及裝置。
【背景技術】
[0002] 隨著智能手機、平板電腦等終端設備的硬件配置不斷提升、功能日益豐富,用戶對 這些終端設備的需求也在增強,往往會在終端設備中安裝各種各樣的應用程序,這就使得 終端設備上的應用程序越來越多。
[0003] 并且,為了提升用戶體驗,移動終端的操作系統也會經常進行升級操作。在 Android系統中,每進行一次系統升級,會對操作系統中所有的應用程序進行更新(也可稱 為優化),以使其在升級后的操作系統中可以快速運行。其中,對應用程序的更新操作以 0DEX操作為主。這樣每次在系統升級完畢后的第一次開機啟動時,因為要依次更新眾多應 用程序,會導致啟動過程非常慢,耗費很長的時間。
[0004] 以安裝了 Android安卓系統的手機為例,安卓系統通常使用Java語言作為開發工 具,但由于某些原因,應用程序更新的底層代碼會使用Native語言(例如C/C++語言,C/ C++等語目相對于Java來講可稱為Native語目,或者原生語目、本地語目)來實現,所以 應用程序的更新就會涉及到Native語言層與Java層之間的通信。在相關技術中,安卓系 統采用的是socket通信機制,即在Java層與Native語言層之間建立socket連接,通過 socket連接實現應用程序的更新。然而,建立socket連接本身就會消耗一定的時間及系統 資源,而且該通信機制也決定了更新過程只能是單線程執行,即逐一更新各應用程序,所以 效率很低,造成系統升級完畢后的第一次開機啟動過程非常耗時。
【發明內容】
[0005] 為克服相關技術中存在的問題,本公開提供更新應用程序的方法及裝置,以解決 同時更新多個應用程序時耗時較長的問題。
[0006] 根據本公開實施例的第一方面,提供一種更新應用程序的方法,所述方法包括:
[0007] 獲取第一列表,所述第一列表為待更新的應用程序的列表;
[0008] 創建第二列表,所述第二列表為正在更新的應用程序的列表;
[0009] 獲取終端設備處理器的核數;
[0010] 根據所述核數在第一語言環境下同時開啟多個更新線程;
[0011] 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所 述第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至 所述第二列表;
[0012] 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用 程序從所述第二列表中移除。
[0013] 可選的,所述第一語言為Java,所述第二語言為C/C++,所述預設的接口為Java本 地接口 JNI。
[0014] 可選的,所述通過預設的接口調用由第二語言實現的更新函數,包括:
[0015] 在負責應用程序更新的Java類中加載指定C文件編譯后生成的類庫,其中所述 c文件中含有所述使用C/C++實現的更新函數且所述C文件中引入了 JNI. h頭文件,所述 Java類中聲明了所述更新函數;
[0016] 在所述Java類的所述更新線程中,直接調用所述更新函數。
[0017] 可選的,所述多個更新線程的個數為:
[0018] 如果 M> = N,則 a = N ;如果 M〈N,則 a = Μ ;
[0019] 其中,a為所述多個更新線程的個數,Μ為所述第一列表中應用程序的個數,Ν為所 述處理器的核數。
[0020] 可選的,所述方法還包括:
[0021] 在收到一個更新線程對一個應用程序更新完成的響應后,判斷所述第一列表中是 否還有應用程序;
[0022] 如果所述第一列表中沒有應用程序,則結束當前的更新線程;
[0023] 如果所述第一列表中仍有應用程序,則繼續在所述第一列表中選取一個應用程序 通過當前的更新線程進行更新。
[0024] 根據本公開實施例的第二方面,提供一種更新應用程序的裝置,所述裝置包括:
[0025] 列表操作模塊,用于獲取第一列表,所述第一列表為待更新的應用程序的列表;創 建第二列表,所述第二列表為正在更新的應用程序的列表;將正在被更新的應用程序從所 述第一列表移至所述第二列表;以及,在收到一個更新線程對一個應用程序更新完成的響 應后,將所述更新完成的應用程序從所述第二列表中移除;
[0026] 線程控制模塊,用于獲取終端設備處理器的核數;根據所述核數在第一語言環境 下同時開啟多個更新線程;
[0027] 更新執行模塊,用于在每個所述更新線程中,通過預設的接口調用由第二語言實 現的更新函數以對所述第一列表中的一個應用程序進行更新。
[0028] 可選的,所述第一語言為Java,所述第二語言為C/C++,所述預設的接口為Java本 地接口 JNI。
[0029] 可選的,所述更新執行模塊包括:
[0030] 調用準備子模塊,用于在負責應用程序更新的Java類中加載指定C文件編譯后生 成的類庫,其中所述C文件中含有所述使用C/C++實現的更新函數且所述C文件中引入了 JNI. h頭文件,所述Java類中聲明了所述更新函數;
[0031] 調用執行子模塊,用于在所述Java類的所述更新線程中,直接調用所述更新函 數。
[0032] 可選的,所述線程控制模塊還用于:
[0033] 在收到一個更新線程對一個應用程序更新完成的響應后,判斷所述第一列表中是 否還有應用程序;如果所述第一列表中沒有應用程序,則結束當前的更新線程;如果所述 第一列表中仍有應用程序,則繼續在所述第一列表中選取一個應用程序通過當前的更新線 程進行更新。
[0034] 根據本公開實施例的第三方面,提供一種更新應用程序的裝置,包括:
[0035] 處理器;
[0036] 用于存儲處理器可執行指令的存儲器;
[0037] 其中,所述處理器被配置為:
[0038] 獲取第一列表,所述第一列表為待更新的應用程序的列表;
[0039] 創建第二列表,所述第二列表為正在更新的應用程序的列表;
[0040] 獲取終端設備處理器的核數;
[0041] 根據所述核數在第一語言環境下同時開啟多個更新線程;
[0042] 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所 述第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至 所述第二列表;
[0043] 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用 程序從所述第二列表中移除。
[0044] 本公開的實施例提供的技術方案可以包括以下有益效果:
[0045] 在本公開實施例中,不再使用socket通信技術,也即并未在兩種語言之間建立 socket連接,而是使用預設的接口,例如JNI接口,使一種語言下的更新線程可以直接調用 另一種語言下的更新函數,從而不但避免了因建立socket連接而導致的時間及系統資源 的消耗,而且將單線程的更新轉變為同時進行的多線程更新,大大提高了眾多應用程序同 時需要更新時的更新效率,縮短了開機啟動時間。
[0046] 應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不 能限制本公開。
【專利附圖】
【附圖說明】
[0047] 此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發明的實施 例,并與說明書一起用于解釋本發明的原理。
[0048] 圖1是根據一示例性實施例示出的一種更新應用程序的方法的流程圖;
[0049] 圖2是根據一示例性實施例示出的一種更新應用程序的方法的流程圖;
[0050] 圖3是根據一示例性實施例示出的一種更新應用程序的方法的流程圖;
[0051] 圖4是相關技術中更新應用程序的不意圖;
[0052] 圖5是根據一示例性實施例示出的更新應用程序的原理圖;
[0053] 圖6是根據一示例性實施例示出的一種更新應用程序的方法的流程圖;
[0054] 圖7是根據一示例性實施例示出的一種更新應用程序的裝置的框圖;
[0055] 圖8是根據一示例性實施例示出的一種更新應用程序的裝置的框圖;
[0056] 圖9是根據一示例性實施例示出的一種用于更新應用程序的裝置的框圖。
【具體實施方式】
[0057] 這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及 附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例 中所描述的實施方式并不代表與本發明相一致的所有實施方式。相反,它們僅是與如所附 權利要求書中所詳述的、本發明的一些方面相一致的裝置和方法的例子。
[0058] 圖1是根據一示例性實施例示出的一種更新應用程序的方法的流程圖。該方法可 以用于手機、平板電腦等終端設備。參見圖1所示,該方法可以包括:
[0059] 在步驟S101中,獲取第一列表,所述第一列表為待更新的應用程序的列表;創建 第二列表,所述第二列表為正在更新的應用程序的列表。
[0060] 在本實施例中,因為待更新的應用程序眾多,所以使用這兩個列表進行管理,第一 列表用于存儲待更新應用程序的相關信息,第二列表用于存儲正在更新的應用程序的相關 信息。在更新過程中,眾多待更新應用程序的相關信息會從第一列表逐漸轉移至第二列表, 從而使系統可以掌控更新的過程。
[0061] 在步驟S102中,獲取終端設備處理器的核數;根據所述核數在第一語言環境下同 時開啟多個更新線程。
[0062] 本實施例中使用多線程進行并行更新,以提高更新效率。
[0063] 作為示例,所述多個更新線程的個數為:
[0064] 如果 M> = N,則 a = N ;如果 M〈N,則 a = Μ ;
[0065] 其中,a為所述多個更新線程的個數,Μ為所述第一列表中應用程序的個數,Ν為所 述處理器的核數。
[0066] 在步驟S103中,在每個所述更新線程中,通過預設的接口調用由第二語言實現的 更新函數以對所述第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所 述第一列表移至所述第二列表。
[0067] 在本實施例中,使用預設的接口實現兩種語言環境的融合。對于預設的接口的具 體實現形式本實施例并不進行限制。
[0068] 作為示例,在一種場景下,所述第一語言為Java,所述第二語言為C/C++,所述預 設的接口為Java本地接口 JNI。
[0069] JNI (Java Native Interface, Java 本地接口)是 Java 提供的一個重要的功能, 它使得用諸如C/C++等語言編寫的代碼可以與運行于JVM(Java Virtual Machine, Java 虛擬機)中的Java代碼集成。JNI能滿足開發者在Java代碼中訪問Native模塊的需求。 JNI的出現使得開發者既可以利用Java語言跨平臺、類庫豐富、開發便捷等特點,又可以利 用Native語言的高效。
[0070] 實際上,JNI是JVM實現中的一部分,因此Native語言和Java代碼都運行在JVM 的宿主環境(Host Environment)。此外,JNI是一個雙向的接口:開發者不僅可以通過JNI 在Java代碼中訪問Native模塊,還可以在Native代碼中嵌入一個JVM,并通過JNI訪問運 行于其中的Java模塊。可見,JNI擔任了一個橋梁的角色,它將JVM與Native模塊聯系起 來,從而實現了 Java代碼與Native代碼的互訪。
[0071] 在步驟S104中,在收到一個更新線程對一個應用程序更新完成的響應后,將所述 更新完成的應用程序從所述第二列表中移除。
[0072] 參見圖2所示,在本實施例或本公開其他某些實施例中,所述通過預設的接口調 用由第二語言實現的更新函數,包括:
[0073] 在步驟S201中,在負責應用程序更新的Java類中加載指定C文件編譯后生成的 類庫,其中所述C文件中含有所述使用C/C++實現的更新函數且所述C文件中引入了 JNI. h頭文件,所述Java類中聲明了所述更新函數。
[0074] 在步驟S202中,在所述Java類的所述更新線程中,直接調用所述更新函數。
[0075] 參見圖3所示,在本實施例或本公開其他某些實施例中,所述方法還可以包括:
[0076] 在步驟S301中,在收到一個更新線程對一個應用程序更新完成的響應后,判斷所 述第一列表中是否還有應用程序;
[0077] 在步驟S302中,如果所述第一列表中沒有應用程序,則結束當前的更新線程;
[0078] 在步驟S303中,如果所述第一列表中仍有應用程序,則繼續在所述第一列表中選 取一個應用程序通過當前的更新線程進行更新。
[0079] 在本實施例中,并未使用socket通信技術,也即并未在兩種語言之間建立socket 連接,而是使用預設的接口,例如JNI接口,使一種語言下的更新線程可以直接調用另一種 語言下的更新函數,從而不但避免了因建立socket連接而導致的時間及系統資源的消耗, 而且將單線程的更新轉變為同時進行的多線程更新,大大提高了眾多應用程序同時需要更 新時的更新效率,縮短了開機啟動時間。
[0080] 下面結合一個具體場景對本公開的方案作進一步說明。
[0081] 在安卓系統下,應用程序的APK的classes, dex文件中含有應用程序的運行代碼。 為了提高應用程序的啟動、運行的速度,可以使用0DEX技術。所謂0DEX技術,簡言之即將 classes, dex中的代碼預先提取出來生成一個dex文件。
[0082] 當系統升級后,原先提取生成的dex文件已失效,需要重新進行提取,這一重新提 取的過程即上文所說的應用程序的更新。該提取過程涉及到Java層與C層之間的通信。
[0083] 在相關技術中,Java層與C層之間的通信使用了 socket技術。作為示例可參見 圖4所示。在圖4中,Java層(相當于socket通信中的客戶端)與C層(相當于socket 通信中的服務器端)分別創建socket ;C層在執行了 "bindO "等一系列操作之后等待 Java層的連接Java層通過"Connect ()"請求連接;雙方在經過了請求(request)及應答 (response)之后連接成功(connected),然后進行讀寫操作,以對應用程序進行逐個更新; 最后關閉socket。
[0084] 建立socket連接本身就會消耗一定的時間及系統資源,而且該通信機制也決定 了更新過程只能是單線程執行,即逐一更新各應用程序,所以效率很低,造成系統升級完畢 后的第一次開機啟動過程非常耗時。
[0085] 在本實施例中,不再使用socket,而是使用JNI。可參見圖5所示。
[0086] 圖5是根據一示例性實施例示出的更新應用程序的原理圖:
[0087] 在圖5中,首先手機在啟動時會開啟用于應用程序更新的Android服務 (PackageManagerService),獲取需要更新的應用程序列表,然后根據CPU核數開啟多個線 程,在每個線程中均調用更新應用程序的函數,也即通過JNI調用C語言實現的native函 數(desopt函數),然后進行應用程序的更新。
[0088] 具體的,參見圖6所示,可以包括:
[0089] 在步驟S601中,在用于進行應用程序更新的Java類中聲明一個native函數。
[0090] 例如:
[0091] public native int doDexOpt(String apkPath, String uid, int isPublic)
[0092] 在步驟S602中,使用C/C++語言實現上述native函數。這個native函數用于完 成對應用程序進行更新的具體工作。
[0093] 在步驟S603中,創建JNI目錄(如果工程已有該項目,則可以直接使用),在JNI 目錄下創建一個C文件,并在該C文件中包含上述native函數,并引入jni. h頭文件。
[0094] 作為示例,倉ll建的c文件可以為update_app. c文件,實現如下:
[0095] ttinciude <jni.h> static int doDexOpt: (JXfEnv 承 env5 jobject object, jstringapk path, jstringuid, j 1 nt is___pub 11c, char reply[ΚΚΡΙΛ.......MAXj) { //實現方法參考commands, c文件中的 // int dcxopt(const char *apk------path, uid------t uid, int is------public) }
[0096]
[0097] 在步驟S604中,修改Android, mk文件,從而使上述c文件也能被編譯。編譯后會 自動生成一個· so文件。
[0098] 作為示例,可以在Android, mk文件中修改添加下面兩句
[0099] L0CAL_C_INCLUDES: = $(L0CAL_PATH)/include
[0100] L0CAL_SRC_FILES+ = jni/update_app. c
[0101] 編譯生成 libupdate_app. so 文件。
[0102] 在步驟S605中,在上述用于進行應用程序更新的Java類中,加載所述c文件。這 樣便可以直接調用上述native函數對應用程序進行更新。
[0103] 例如,在類開始處添加上述c文件,去掉文件后綴,即
[0104] static {
[0105] System. loadLibrary("update_app");
[0106] }
[0107] 在步驟S606中,系統啟動過程中,得到待更新的應用程序的列表x,并創建正在更 新中的應用列表y。例如待的應用程序有Μ個。
[0108] 在步驟S607中,得到CPU的核數。例如核數有Ν個。
[0109] 在步驟S608中,同時開啟a個線程,在每個線程中,將相應應用程序的apk路徑等 信息作為參數,直接調用上述native函數,從而實現同時對a個應用程序進行更新;在對某 一個應用程序開始更新時,將該應用程序從X列表中移除,并且加入y列表。
[0110] 其中a的計算算法可以是:
[0111] if M> = N, then a = N, if M<N, then a = M
[0112] 在步驟S609中,收到某個應用程序更新完成的響應后,從正在更新的應用列表y 中移除該應用程序的相關信息。判斷是否仍有待更新的應用程序,如果沒有,結束當前線 程,如果有,則發起對另一個應用程序的更新操作。
[0113] 圖7是根據一示例性實施例示出的一種更新應用程序的裝置的框圖。該裝置可以 用于手機、平板電腦等終端設備。參見圖7所示,該裝置可以包括:
[0114] 列表操作模塊701,用于獲取第一列表,所述第一列表為待更新的應用程序的列 表;創建第二列表,所述第二列表為正在更新的應用程序的列表;將正在被更新的應用程 序從所述第一列表移至所述第二列表;以及,在收到一個更新線程對一個應用程序更新完 成的響應后,將所述更新完成的應用程序從所述第二列表中移除;
[0115] 線程控制模塊702,用于獲取終端設備處理器的核數;根據所述核數在第一語言 環境下同時開啟多個更新線程;
[0116] 更新執行模塊703,用于在每個所述更新線程中,通過預設的接口調用由第二語言 實現的更新函數以對所述第一列表中的一個應用程序進行更新。
[0117] 在本實施例或本公開其他某些實施例中,所述第一語言為Java,所述第二語言為 C/C++,所述預設的接口為Java本地接口 JNI。
[0118] 參見圖8所示,在本實施例或本公開其他某些實施例中,所述更新執行模塊703可 以包括:
[0119] 調用準備子模塊7031,用于在負責應用程序更新的Java類中加載指定C文件編譯 后生成的類庫,其中所述C文件中含有所述使用C/C++實現的更新函數且所述C文件中引 入了 JNI. h頭文件,所述Java類中聲明了所述更新函數;
[0120] 調用執行子模塊7032,用于在所述Java類的所述更新線程中,直接調用所述更新 函數。
[0121] 在本實施例或本公開其他某些實施例中,所述線程控制模塊702還可以用于:
[0122] 在收到一個更新線程對一個應用程序更新完成的響應后,判斷所述第一列表中是 否還有應用程序;如果所述第一列表中沒有應用程序,則結束當前的更新線程;如果所述 第一列表中仍有應用程序,則繼續在所述第一列表中選取一個應用程序通過當前的更新線 程進行更新。
[0123] 關于上述實施例中的裝置,其中各個模塊執行操作的具體方式已經在有關該方法 的實施例中進行了詳細描述,此處將不做詳細闡述說明。
[0124] 本公開還提供了一種更新應用程序的裝置,包括:
[0125] 處理器;
[0126] 用于存儲處理器可執行指令的存儲器;
[0127] 其中,所述處理器被配置為:
[0128] 獲取第一列表,所述第一列表為待更新的應用程序的列表;
[0129] 創建第二列表,所述第二列表為正在更新的應用程序的列表;
[0130] 獲取終端設備處理器的核數;
[0131] 根據所述核數在第一語言環境下同時開啟多個更新線程;
[0132] 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所 述第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至 所述第二列表;
[0133] 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用 程序從所述第二列表中移除。
[0134] 本公開還公開了一種非臨時性計算機可讀存儲介質,當所述存儲介質中的指令 由終端設備的處理器執行時,使得終端設備能夠執行一種更新應用程序方法,所述方法包 括:
[0135] 獲取第一列表,所述第一列表為待更新的應用程序的列表;
[0136] 創建第二列表,所述第二列表為正在更新的應用程序的列表;
[0137] 獲取終端設備處理器的核數;
[0138] 根據所述核數在第一語言環境下同時開啟多個更新線程;
[0139] 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所 述第一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至 所述第二列表;
[0140] 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用 程序從所述第二列表中移除。
[0141] 圖9是根據一示例性實施例示出的一種用于更新應用程序的裝置的框圖。例如, 該裝置2800可以是移動電話,計算機,數字廣播終端,消息收發設備,游戲控制臺,平板設 備,醫療設備,健身設備,個人數字助理等。
[0142] 參照圖9,裝置2800可以包括以下一個或多個組件:處理組件2802,存儲器2804, 電源組件2806,多媒體組件2808,音頻組件2810,輸入/輸出(I/O)的接口 2812,傳感器組 件2814,以及通信組件2816。
[0143] 處理組件2802通常控制裝置2800的整體操作,諸如與顯示,電話呼叫,數據通信, 相機操作和記錄操作相關聯的操作。處理組件2802可以包括一個或多個處理器2820來執 行指令,以完成上述的方法的全部或部分步驟。此外,處理組件2802可以包括一個或多個 模塊,便于處理組件2802和其他組件之間的交互。例如,處理組件2802可以包括多媒體模 塊,以方便多媒體組件2808和處理組件2802之間的交互。
[0144] 存儲器2804被配置為存儲各種類型的數據以支持在設備2800的操作。這些數據 的示例包括用于在裝置2800上操作的任何應用程序或方法的指令,聯系人數據,電話簿數 據,消息,圖片,視頻等。存儲器2804可以由任何類型的易失性或非易失性存儲設備或者它 們的組合實現,如靜態隨機存取存儲器(SRAM),電可擦除可編程只讀存儲器(EEPR0M),可 擦除可編程只讀存儲器(EPROM),可編程只讀存儲器(PR0M),只讀存儲器(R0M),磁存儲器, 快閃存儲器,磁盤或光盤。
[0145] 電源組件2806為裝置2800的各種組件提供電力。電源組件2806可以包括電源 管理系統,一個或多個電源,及其他與為裝置2800生成、管理和分配電力相關聯的組件。
[0146] 多媒體組件2808包括在所述裝置2800和用戶之間的提供一個輸出接口的屏幕。 在一些實施例中,屏幕可以包括液晶顯示器(LCD)和觸摸面板(TP)。如果屏幕包括觸摸面 板,屏幕可以被實現為觸摸屏,以接收來自用戶的輸入信號。觸摸面板包括一個或多個觸摸 傳感器以感測觸摸、滑動和觸摸面板上的手勢。所述觸摸傳感器可以不僅感測觸摸或滑動 動作的邊界,而且還檢測與所述觸摸或滑動操作相關的持續時間和壓力。在一些實施例中, 多媒體組件2808包括一個前置攝像頭和/或后置攝像頭。當裝置2800處于操作模式,如 拍攝模式或視頻模式時,前置攝像頭和/或后置攝像頭可以接收外部的多媒體數據。每個 前置攝像頭和后置攝像頭可以是一個固定的光學透鏡系統或具有焦距和光學變焦能力。
[0147] 音頻組件2810被配置為輸出和/或輸入音頻信號。例如,音頻組件2810包括一 個麥克風(MIC),當裝置2800處于操作模式,如呼叫模式、記錄模式和語音識別模式時,麥 克風被配置為接收外部音頻信號。所接收的音頻信號可以被進一步存儲在存儲器2804或 經由通信組件2816發送。在一些實施例中,音頻組件2810還包括一個揚聲器,用于輸出音 頻信號。
[0148] I/O接口 2812為處理組件2802和外圍接口模塊之間提供接口,上述外圍接口模塊 可以是鍵盤,點擊輪,按鈕等。這些按鈕可包括但不限于:主頁按鈕、音量按鈕、啟動按鈕和 鎖定按鈕。
[0149] 傳感器組件2814包括一個或多個傳感器,用于為裝置2800提供各個方面的狀態 評估。例如,傳感器組件2814可以檢測到設備2800的打開/關閉狀態,組件的相對定位, 例如所述組件為裝置2800的顯示器和小鍵盤,傳感器組件2814還可以檢測裝置2800或裝 置2800 -個組件的位置改變,用戶與裝置2800接觸的存在或不存在,裝置2800方位或加 速/減速和裝置2800的溫度變化。傳感器組件2814可以包括接近傳感器,被配置用來在 沒有任何的物理接觸時檢測附近物體的存在。傳感器組件2814還可以包括光傳感器,如 CMOS或C⑶圖像傳感器,用于在成像應用中使用。在一些實施例中,該傳感器組件2814還 可以包括加速度傳感器,陀螺儀傳感器,磁傳感器,壓力傳感器或溫度傳感器。
[0150] 通信組件2816被配置為便于裝置2800和其他設備之間有線或無線方式的通信。 裝置2800可以接入基于通信標準的無線網絡,如WiFi,2G或3G,或它們的組合。在一個示 例性實施例中,通信組件2816經由廣播信道接收來自外部廣播管理系統的廣播信號或廣 播相關信息。在一個示例性實施例中,所述通信組件2816還包括近場通信(NFC)模塊,以促 進短程通信。例如,在NFC模塊可基于射頻識別(RFID)技術,紅外數據協會(IrDA)技術, 超寬帶(UWB)技術,藍牙(BT)技術和其他技術來實現。
[0151] 在示例性實施例中,裝置2800可以被一個或多個應用專用集成電路(ASIC)、數字 信號處理器(DSP)、數字信號處理設備(DSPD)、可編程邏輯器件(PLD)、現場可編程門陣列 (FPGA)、控制器、微控制器、微處理器或其他電子元件實現,用于執行上述方法。
[0152] 在示例性實施例中,還提供了一種包括指令的非臨時性計算機可讀存儲介質,例 如包括指令的存儲器2804,上述指令可由裝置2800的處理器2820執行以完成上述方法。例 如,所述非臨時性計算機可讀存儲介質可以是ROM、隨機存取存儲器(RAM)、CD-ROM、磁帶、 軟盤和光數據存儲設備等。
[0153] 本領域技術人員在考慮說明書及實踐這里公開的發明后,將容易想到本發明的其 它實施方案。本申請旨在涵蓋本發明的任何變型、用途或者適應性變化,這些變型、用途或 者適應性變化遵循本發明的一般性原理并包括本公開未公開的本【技術領域】中的公知常識 或慣用技術手段。說明書和實施例僅被視為示例性的,本發明的真正范圍和精神由下面的 權利要求指出。
[0154] 應當理解的是,本發明并不局限于上面已經描述并在附圖中示出的精確結構,并 且可以在不脫離其范圍進行各種修改和改變。本發明的范圍僅由所附的權利要求來限制。
【權利要求】
1. 一種更新應用程序的方法,其特征在于,所述方法包括: 獲取第一列表,所述第一列表為待更新的應用程序的列表; 創建第二列表,所述第二列表為正在更新的應用程序的列表; 獲取終端設備處理器的核數; 根據所述核數在第一語言環境下同時開啟多個更新線程; 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所述第 一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至所述 第二列表; 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用程序 從所述第二列表中移除。
2. 根據權利要求1所述的方法,其特征在于,所述第一語言為Java,所述第二語言為C/ C++,所述預設的接口為Java本地接口 JNI。
3. 根據權利要求2所述的方法,其特征在于,所述通過預設的接口調用由第二語言實 現的更新函數,包括: 在負責應用程序更新的Java類中加載指定C文件編譯后生成的類庫,其中所述C文件 中含有所述使用C/C++實現的更新函數且所述C文件中引入了 JNI. h頭文件,所述Java類 中聲明了所述更新函數; 在所述Java類的所述更新線程中,直接調用所述更新函數。
4. 根據權利要求1所述的方法,其特征在于,所述多個更新線程的個數為: 如果M> = N,則a = N ;如果M〈N,則a = Μ ; 其中,a為所述多個更新線程的個數,Μ為所述第一列表中應用程序的個數,Ν為所述處 理器的核數。
5. 根據權利要求1所述的方法,其特征在于,所述方法還包括: 在收到一個更新線程對一個應用程序更新完成的響應后,判斷所述第一列表中是否還 有應用程序; 如果所述第一列表中沒有應用程序,則結束當前的更新線程; 如果所述第一列表中仍有應用程序,則繼續在所述第一列表中選取一個應用程序通過 當前的更新線程進行更新。
6. -種更新應用程序的裝置,其特征在于,所述裝置包括: 列表操作模塊,用于獲取第一列表,所述第一列表為待更新的應用程序的列表;倉il建第 二列表,所述第二列表為正在更新的應用程序的列表;將正在被更新的應用程序從所述第 一列表移至所述第二列表;以及,在收到一個更新線程對一個應用程序更新完成的響應后, 將所述更新完成的應用程序從所述第二列表中移除; 線程控制模塊,用于獲取終端設備處理器的核數;根據所述核數在第一語言環境下同 時開啟多個更新線程; 更新執行模塊,用于在每個所述更新線程中,通過預設的接口調用由第二語言實現的 更新函數以對所述第一列表中的一個應用程序進行更新。
7. 根據權利要求6所述的裝置,其特征在于,所述第一語言為Java,所述第二語言為C/ C++,所述預設的接口為Java本地接口 JNI。
8. 根據權利要求7所述的裝置,其特征在于,所述更新執行模塊包括: 調用準備子模塊,用于在負責應用程序更新的Java類中加載指定C文件編譯后生成的 類庫,其中所述C文件中含有所述使用C/C++實現的更新函數且所述C文件中引入了 JNI. h頭文件,所述Java類中聲明了所述更新函數; 調用執行子模塊,用于在所述Java類的所述更新線程中,直接調用所述更新函數。
9. 根據權利要求6所述的裝置,其特征在于,所述線程控制模塊還用于: 在收到一個更新線程對一個應用程序更新完成的響應后,判斷所述第一列表中是否還 有應用程序;如果所述第一列表中沒有應用程序,則結束當前的更新線程;如果所述第一 列表中仍有應用程序,則繼續在所述第一列表中選取一個應用程序通過當前的更新線程進 行更新。
10. -種更新應用程序的裝置,其特征在于,包括: 處理器; 用于存儲處理器可執行指令的存儲器; 其中,所述處理器被配置為: 獲取第一列表,所述第一列表為待更新的應用程序的列表; 創建第二列表,所述第二列表為正在更新的應用程序的列表; 獲取終端設備處理器的核數; 根據所述核數在第一語言環境下同時開啟多個更新線程; 在每個所述更新線程中,通過預設的接口調用由第二語言實現的更新函數以對所述第 一列表中的一個應用程序進行更新,并將所述被更新的應用程序從所述第一列表移至所述 第二列表; 在收到一個更新線程對一個應用程序更新完成的響應后,將所述更新完成的應用程序 從所述第二列表中移除。
【文檔編號】G06F9/445GK104281478SQ201410589917
【公開日】2015年1月14日 申請日期:2014年10月28日 優先權日:2014年10月28日
【發明者】續麗娜, 李明浩, 劉洪杰 申請人:小米科技有限責任公司