控制應用程序自啟的方法及裝置制造方法
【專利摘要】本發明公開了一種控制應用程序自啟的方法及裝置,其中的方法包括:應用程序層通過監聽模塊,對框架層中用于調取所述應用程序對應的組件的接口進行監聽;所述應用程序層通過監聽所述接口,獲取到所述應用程序對應的組件信息;所述應用程序層利用所述組件信息,在預置的自啟規則中進行匹配,如果匹配成功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序的自啟行為。本發明將攔截范圍擴展到全部組件上,并通過分析這些組件的行為總結出一些規則,降低誤攔截。
【專利說明】控制應用程序自啟的方法及裝置
【技術領域】
[0001] 本發明涉及終端安全【技術領域】,具體涉及一種控制應用程序自啟的方法及裝置。
【背景技術】
[0002] 安卓(Android)系統是一個是基于組件的系統,這些組件包括broadcast (廣播 組件)、provider (提供者組件)、service (服務組件)和activity (活動組件)。每一個 Android軟件都是由這些組件拼裝而成,通過配置這些組件的功能和行為,就能實現軟件被 用戶或者系統中其他組件喚醒。在很多情況下,這種喚醒行為并不是由用戶主動觸發,這種 行為被稱做應用程序自啟或軟件自啟。Android的軟件自啟行為不僅嚴重的降低了系統續 航時間,還大大降低的系統的流暢度。
[0003] 目前,很多安全廠商都已經在產品中加入了禁止Android軟件自啟的功能,但 實現方法上存在很大缺陷。以360手機衛士為例,該安全軟件通過禁用第三方軟件的 broadcast組件來防止自啟,這種禁自啟方式存在以下缺點:1.無法有效識別軟件自啟。現 在很多軟件(手機QQ,淘寶,助手類軟件等)已經能夠通過service組件來實現后臺自啟, 而僅僅只把broadcast組件作為監控點,已經無法全面監測軟件的自啟行為,另外這種實 現方式無法將軟件自啟和用戶主動喚醒做區分,極大降低用戶體驗。2.這種攔截軟件自啟 的方式存在一定的風險。禁用組件的防自啟方式是一種非常危險的行為,一旦組件被禁用, 即使用戶手動喚醒包含該組件的軟件也無法取消這種禁用狀態,如果用戶卸載了 360手機 衛士,那么被禁止自啟的程序將進入永久性的功能缺失狀態。
【發明內容】
[0004] 鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上 述問題的控制應用程序自啟的方法及裝置。
[0005] 依據本發明的一個方面,提供一種控制應用程序自啟的方法,包括:應用程序層通 過監聽模塊,對框架層中用于調取所述應用程序對應的組件的接口進行監聽;所述應用程 序層通過監聽所述接口,獲取到所述應用程序對應的組件信息;所述應用程序層利用所述 組件信息,在預置的自啟規則中進行匹配,如果匹配成功,則確定所述應用程序自啟,并通 知所述框架層控制所述應用程序的自啟行為。
[0006] 優選的,所述在預置的自啟規則中進行匹配包括:通過所述應用程序對應的組件 類型和/或所述應用程序的運行狀態,確定所述應用程序是否自啟。
[0007] 優選的,如果根據所述組件信息確定所述組件類型是廣播組件,則進一步判斷所 述應用程序是否已經處于運行狀態,如果是,則確定所述應用程序并非自啟,不禁止所述應 用程序的啟動行為,否則,確定所述應用程序是自啟,并通知所述框架層控制所述應用程序 的自啟行為。
[0008] 優選的,所述通知所述框架層控制所述應用程序的自啟行為包括:通過注入框架 層的系統服務進程實現動態廣播過濾,當所述應用程序未被喚醒時,丟棄所有需要該廣播 組件處理的廣播,實現預防自啟;當所述應用程序被用戶喚醒后,啟動所述應用程序。
[0009] 優選的,如果根據所述組件信息確定所述組件類型是服務組件,則進一步判斷所 述應用程序是否已經處于運行狀態,如果是,則確定所述應用程序并非自啟,不禁止所述應 用程序的啟動行為,否則,確定所述應用程序是自啟,并通知所述框架層停止所述應用程序 的自啟行為。
[0010] 優選的,還包括:向用戶發送提示消息,提示用戶已經停止了所述應用程序的自啟 行為;當用戶設置允許所述應用程序自啟時,所述應用程序層通知所述框架層不再禁止所 述應用程序的自啟行為。
[0011] 優選的,如果根據所述組件信息確定所述組件類型是活動組件或提供者組件,則 確定所述應用程序并非自啟,不禁止所述應用程序的啟動行為。
[0012] 優選的,所述應用程序層的監聽模塊采用hook機制中斷所述框架層中的所述接 口調取所述應用程序對應的組件的過程,從而實現對所述接口的監聽。
[0013] 依據本發明的另一個方面,提供一種控制應用程序自啟的裝置,包括:監聽單元, 用于通過應用程序層通過監聽模塊,對框架層中用于調取所述應用程序對應的組件的接口 進行監聽;組件信息獲取單元,用于通過監聽所述接口,獲取到所述應用程序對應的組件信 息;自啟控制單元,用于在所述應用程序層利用所述組件信息,在預置的自啟規則中進行匹 配,如果匹配成功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序的自啟 行為。
[0014] 優選的,所述自啟控制單元具體用于:通過所述應用程序對應的組件類型和/或 所述應用程序的運行狀態,確定所述應用程序是否自啟。
[0015] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是廣播組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層控制所述應用程序的自啟行為。
[0016] 優選的,所述自啟控制單元具體用于:通過注入框架層的系統服務進程實現動態 廣播過濾,當所述應用程序未被喚醒時,丟棄所有需要該廣播組件處理的廣播,實現預防自 啟;當所述應用程序被用戶喚醒后,啟動所述應用程序。
[0017] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是服務組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層停止所述應用程序的自啟行為。
[0018] 優選的,還包括:提示單元,向用戶發送提示消息,提示用戶已經停止了所述應用 程序的自啟行為;所述自啟控制單元還用于,當用戶設置允許所述應用程序自啟時,通過所 述應用程序層通知所述框架層不再禁止所述應用程序的自啟行為。
[0019] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是活動組件或提供者組件,則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行 為。
[0020] 優選的,所述應用程序層的監聽模塊采用hook機制中斷所述框架層中的所述接 口調取所述應用程序對應的組件的過程,從而實現對所述接口的監聽。
[0021] 如之前對現有技術的分析,傳統禁止應用程序自啟的方法只是針對應用程序 的broadcast組件,但其實能夠引發應用程序自啟的組件還包含activity、service和 provider。為了達到更好的攔截效果,本發明將攔截范圍擴展到全部組件上,并通過分析這 些組件的行為總結出一些規則,降低誤攔截。具體的,應用程序層通過監聽框架層負責調取 應用程序對應的組件的接口,獲取到應用程序對應的組件信息;并利用所述組件信息,在預 置的自啟規則中進行匹配,從而確定應用程序是否自啟,并根據組件類型最終決定是否禁 止該自啟行為。
[0022] 上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段, 而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠 更明顯易懂,以下特舉本發明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0023] 通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通 技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0024] 圖1示出了根據本發明一個實施例的控制應用程序自啟的方法流程圖;以及
[0025] 圖2示出了根據本發明一個實施例的控制應用程序自啟的方法實施例示意圖。
【具體實施方式】
[0026] 下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例 所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍 完整的傳達給本領域的技術人員。
[0027] 為了更為有效的解決Android的應用程序自啟問題,本發明提出一種智能化的控 制應用程序自啟的方案。
[0028] 本領域技術人員理解,操作系統包括應用程序層(app層)和系統框架層 (framework層)。本發明一種優選實現方式是,對app層和framework層進行改進,從而利 用這兩層的協同配合實現在智能終端上快速啟動通信。具體的,可以在app層增加一個監 聽模塊,用于監聽framework層喚醒組件從而實現應用程序自啟的操作,從而可以在應用 程序自啟之前,獲取到負責應用程序自啟的組件的相關信息,并分析該組件的類型,根據預 先設置的自啟規則,確定是否禁止該應用程序自啟行為。
[0029] 圖1是本發明實施例提供的一種控制應用程序自啟的方法流程圖。該方法包括步 驟 S101 - S103。
[0030] S101 :app層通過監聽模塊,對framework層中用于調取應用程序對應的組件的接 口進行監聽。
[0031] 以android系統為例,在啟動一個應用程序之前,會首先在framework層分析出需 要啟動的組件名稱,同時framework層會記錄與該應用程序啟動相關的信息,比如被啟動 的組件名稱,該組件的類型(是broadcast、activity、service還是provider)等。通過注 入和java hook,就能對framework層記錄該信息的接口進行監聽,并將該信息返回給app 層的監聽模塊(例如,手機殺毒客戶端),再由該殺毒客戶端決定是否允許該應用程序的啟 動行為。因此,實際上監聽行為是app層通過監聽framework層的接口調用實現的。因為 這個接口本身就提供了被喚醒組件的相關信息,所以只需要對從framework層獲取的數據 進行少量解析即可得到。
[0032] 參見圖2,為本發明實施例的控制應用程序自啟的方法實施例示意圖。App層的 監聽模塊對framework層中用于調取應用程序對應的組件的接口進行監聽,并將監聽到 的數據與預置的自啟規則進行匹配,然后根據匹配結果返回給framework層,從而使得 framework層控制應用程序的自啟。
[0033] 可采用中斷機制實現對調取組件的接口進行監聽。具體的,可采用h〇〇k(掛鉤或 鉤子)機制實現對framework層中的用于調取組件的接口進行監聽。本領域技術人員了 解,hook機制允許應用程序截獲處理操作系統的消息或特定事件。鉤子實際上是一個處理 消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口 前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理 (改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。在本發 明實施例中,采用hook機制中斷調取應用程序對應的組件的過程,實現在應用程序自啟之 前獲取其組件信息。
[0034] S102 :app層通過監聽該接口,獲取到應用程序對應的組件信息。
[0035] 以android系統為例,四大基本組件分別是activity (活動組件)、broadcast (廣 播組件)、service (服務組件)和provider (提供者組件)。
[0036] 下面對這四種組件類型作簡單介紹。
[0037] (1) activity 組件
[0038] 應用程序中,一個activity通常就是一個單獨的屏幕,它上面可以顯示一些控件 也可以監聽并處理用戶的事件做出響應。
[0039] (2) broadcast 組件
[0040] 應用程序可以使用broadcast對外部事件進行過濾,從而只對感興趣的外部事件 (如當電話呼入時,或者數據網絡可用時)進行接收并做出響應。broadcast沒有用戶界面。 然而,它們可以啟動一個activity或service來響應它們收到的信息,或者用狀態欄管理 器(NotificationManager)來通知用戶。通知可以用很多種方式來吸引用戶的注意力- 閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它 并獲取消息。
[0041] (3) service 組件
[0042] 一個Service是一段長生命周期的沒有用戶界面的程序,可以用來開發如監控類 程序。例如,一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用程 序中,應該會有多個activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個功 能并沒有對應的activity,因為使用者當然會認為在導航到其它屏幕時音樂應該還在播放 的。在這個例子中,媒體播放器這個activity會使用Context. startServiceO來啟動一 個service,從而可以在后臺保持音樂的播放。同時,系統也將保持這個service -直執行, 直到這個service運行結束。另外,還可以通過使用Context. bindServiceO方法,連接到 一個service上(如果這個service還沒有運行將啟動它)。當連接到一個service之后, 還可以service提供的接口與它進行通訊。以媒體播放器這個例子來說,還可以進行暫停、 重播等操作。
[0043] (4) provider 組件
[0044] android平臺提供了 Content Provider (內容提供者),使一個應用程序的指定數 據集提供給其他應用程序。這些數據可以存儲在文件系統中、在一個SQLite數據庫、或以 任何其他合理的方式,其他應用程序可以通過ContentResolver類從該內容提供者中獲取 或存入數據,只有需要在多個應用程序間共享數據時才需要內容提供者。例如,通訊錄數 據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處在于統一了數據的訪 問方式。
[0045] S103 :app層利用獲取到的組件信息,在預置的自啟規則中進行匹配,如果匹配成 功,則確定應用程序自啟,并通知framework層控制該應用程序的自啟行為。
[0046] 步驟S103包括兩個關鍵點,一是需要判斷應用程序是否自啟,再是如何控制應用 程序的自啟行為。
[0047] 首先,根據組件類型判斷應用程序是否自啟。
[0048] 如之前對現有技術的分析,傳統禁止應用程序自啟的方法只是針對應用程序 的broadcast組件,但其實能夠引發應用程序自啟的組件還包含activity、service和 provider。為了達到更好的攔截效果,本發明將攔截范圍擴展到全部組件上,并通過分析這 些組件的行為總結出一些規則,降低誤攔截。
[0049] 如前描述的,通過注入和java hook等手段,能夠實時監聽各個軟件的啟動行為, 并能夠分析出導致該軟件被喚醒的組件。
[0050] 在判定是否為軟件的自啟行為時,會遵循以下規則:
[0051] (1) activity 組件
[0052] activity組件是可視化組件,其引發的啟動行為不能被攔截,因為這種行為多由 用戶觸發,并非軟件自啟。
[0053] (2) broadcast 組件
[0054] 分兩種情況處理。如果包含該broadcast組件的軟件已經處于運行狀態(例如, 殺毒客戶端啟動成功后,會監聽手機中每個應用程序的運行狀態,當一個組件被啟動時,就 可以遍歷這個運行狀態列表,判別包含該組件的應用程序是否處于運行狀態。具體的實現 方法就是注入每一個應用程序,在該程序中設置一個監聽器),則認為當前的啟動行為并非 自啟,不需要被攔截,這種情況一般發生在多進程Android軟件中。反之,則認為是自啟。
[0055] (3) service 組件
[0056] 判別方式與broadcast組件類似。但是service組件的重要性一般要高于 broadcast組件,不恰當的攔截極有可能導致某些軟件運行異常,為了避免這種情況,當 service組件引發的自啟行為被攔截時,可進一步給予提示,引導用戶完成預期的操作。例 如,預期的操作一般有以下幾種場景:比如當用戶在手機淘寶上進行支付時,即使用戶禁止 了支付寶自啟,此時他也希望支付寶能夠被喚醒;另外一種場景是360手機衛士和360手 機助手,當這個兩個應用程序共存時,手機衛士會不斷通過service組件喚醒手機助手,如 果用戶本身就禁止了手機助手的自啟功能,那么這時候用戶很有可能不希望手機助手被啟 動。根據具體的使用場景,用戶會對禁自啟的效果產生不同的預期。
[0057] (4) provider 組件
[0058] 對provider組件引發的啟動行為一般不攔截。
[0059] 通過對以上這些規則的應用,可以較準確的判定應用程序是否存在自啟行為,同 時又不對用戶的正常使用造成困擾。
[0060] 在確定了應用程序是否自啟之后,采取安全的攔截方式。
[0061] 傳統的攔截方法可能導致應用程序功能缺失,為了避免這種情況,本發明提出一 套新的攔截方案。
[0062] (1)對于broadcast組件,不再禁用該組件,而是通過注入Android系統的關鍵進 程system_server (系統服務)進程實現動態廣播過濾(動態的廣播過濾就是:能夠動態的 配置哪些應用在未啟動狀態下能夠接收廣播,哪些不能接受廣播),當軟件未被喚醒時,所 有需要該broadcast組件處理的廣播都會被直接丟棄掉,實現預防自啟;而當軟件被用戶 喚醒后,這種過濾行為就會被自動停止,不會對軟件的正常運行造成任何影響,更加安全。
[0063] (2)對于service組件,如果發現是自啟行為則通知Android系統停止該軟件的 運行并給予用戶相應的提示,用戶可以隨時根據當前的使用需求決定某個軟件是否需要 被禁止自啟。其中,"通知Android系統停止該軟件的運行"是指:app層以接口方式通知 framework層;注入system_server進程后,會在該進程中添加一個新的服務,手機殺毒客 戶端可以與該服務進行通信。因為該服務運行在systenuserver進程中,具有殺死任何進 程的權限,所以手機殺毒客戶端只需要調用該服務的接口即可停止某款軟件的運行。為了 安全起見,該接口并不直接停止軟件運行,而是通過調用framework層的接口來完成。
[0064] 通過上述多種途徑相結合的攔截方式,可以安全有效的禁止軟件自啟。
[0065] 下面以一個具體例子,對本發明提供的控制應用程序自啟的方法進行描述。
[0066] 以在QQ軟件上實施本發明方案為例,流程如下:
[0067] 1.用戶在app層的手機殺毒客戶端中禁止QQ軟件自啟動,QQ軟件停止運行;
[0068] 2.在廣播過濾列表中添加 QQ,此時所有發給QQ軟件的廣播會被直接丟棄;
[0069] 3.當某款QQ游戲軟件需要通過QQ進行授權時,就會嘗試通過service方式喚醒 QQ ;
[0070] 4. framework層監聽到QQ嘗試啟動,啟動該軟件的組件是com. tencent. qq/com. tencent. qq. service,組件的類型是service, framework層將該消息發送給手機殺毒客戶 端;
[0071] 5.手機殺毒客戶端發現QQ軟件已經被禁自啟動,就會通過駐留在system_server 中的一個服務停止QQ軟件的啟動行為;為了不給用戶造成困惑,會在屏幕上提醒"360手機 殺毒客戶端已經禁止QQ啟動〃;
[0072] 6.用戶發現禁止QQ啟動后,QQ游戲無法正常運行,就會手動開啟QQ軟件(從啟 動器中打開,從啟動器中打開任何軟件,殺毒客戶端都是不攔截的)或者在手機殺毒客戶 端中取消禁止QQ自啟動;
[0073] 7.用戶再次打開QQ游戲,QQ游戲再次向QQ申請授權,啟動組件仍然是com. tencent. qq/com. tencent. qq. service,組件的類型是 service, framework 層將該消息發 送給手機殺毒客戶端;
[0074] 8.手機殺毒客戶端發現QQ已經啟動或者已經被停止禁自啟,則直接放行,并停止 過濾發給該軟件的廣播。
[0075] 與上述方法相對應,本發明還提供一種控制應用程序自啟的裝置。該裝置可以通 過硬件、軟件或軟硬件結合方式實現。該裝置可以是指終端內部的功能模塊,也可以是指終 端本身,只要終端包括實現該裝置的功能即可。其中,終端的操作系統包括框架層和應用程 序層。該裝置包括:
[0076] 監聽單元,用于通過應用程序層通過監聽模塊,對框架層中用于調取所述應用程 序對應的組件的接口進行監聽;
[0077] 組件信息獲取單元,用于通過監聽所述接口,獲取到所述應用程序對應的組件信 息;
[0078] 自啟控制單元,用于在所述應用程序層利用所述組件信息,在預置的自啟規則中 進行匹配,如果匹配成功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序 的自啟行為。
[0079] 優選的,所述自啟控制單元具體用于:通過所述應用程序對應的組件類型和/或 所述應用程序的運行狀態,確定所述應用程序是否自啟。
[0080] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是廣播組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層控制所述應用程序的自啟行為。
[0081] 優選的,所述自啟控制單元具體用于:通過注入框架層的系統服務進程實現動態 廣播過濾,當所述應用程序未被喚醒時,丟棄所有需要該廣播組件處理的廣播,實現預防自 啟;當所述應用程序被用戶喚醒后,啟動所述應用程序。
[0082] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是服務組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層停止所述應用程序的自啟行為。
[0083] 優選的,該裝置還包括:提示單元,向用戶發送提示消息,提示用戶已經停止了所 述應用程序的自啟行為;所述自啟控制單元還用于,當用戶設置允許所述應用程序自啟時, 通過所述應用程序層通知所述框架層不再禁止所述應用程序的自啟行為。
[0084] 優選的,所述自啟控制單元具體用于:如果根據所述組件信息確定所述組件類型 是活動組件或提供者組件,則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行 為。
[0085] 優選的,所述應用程序層的監聽模塊采用hook機制中斷所述框架層中的所述接 口調取所述應用程序對應的組件的過程,從而實現對所述接口的監聽。
[0086] 在此提供的算法和顯示不與任何特定計算機、虛擬系統或者其它設備固有相關。 各種通用系統也可以與基于在此的示教一起使用。根據上面的描述,構造這類系統所要求 的結構是顯而易見的。此外,本發明也不針對任何特定編程語言。應當明白,可以利用各種 編程語言實現在此描述的本發明的內容,并且上面對特定語言所做的描述是為了披露本發 明的最佳實施方式。
[0087] 在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施 例可以在沒有這些具體細節的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構 和技術,以便不模糊對本說明書的理解。
[0088] 類似地,應當理解,為了精簡本公開并幫助理解各個發明方面中的一個或多個,在 上面對本發明的示例性實施例的描述中,本發明的各個特征有時被一起分組到單個實施 例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保 護的本發明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面 的權利要求書所反映的那樣,發明方面在于少于前面公開的單個實施例的所有特征。因此, 遵循【具體實施方式】的權利要求書由此明確地并入該【具體實施方式】,其中每個權利要求本身 都作為本發明的單獨實施例。
[0089] 本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地 改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單 元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或 子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任 何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開 的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴 隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代 特征來代替。
[0090] 此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例 中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發明的 范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任 意之一都可以以任意的組合方式來使用。
[0091] 本發明的各個部件實施例可以以硬件實現,或者以在一個或者多個處理器上運行 的軟件模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用 微處理器或者數字信號處理器(DSP)來實現根據本發明實施例的控制應用程序自啟的裝 置中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用于執行這里所描述 的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產品)。這 樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的 形式。這樣的信號可以從因特網網站上下載得到,或者在載體信號上提供,或者以任何其他 形式提供。
[0092] 應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,并且本領 域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中, 不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞"包含"不排除存在 未列在權利要求中的元件或步驟。位于元件之前的單詞"一"或"一個"不排除存在多個這 樣的元件。本發明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來 實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件 項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為 名稱。
[0093] 本發明提供以下方案:
[0094] A1、一種控制應用程序自啟的方法,包括:
[0095] 應用程序層通過監聽模塊,對框架層中用于調取所述應用程序對應的組件的接口 進行監聽;
[0096] 所述應用程序層通過監聽所述接口,獲取到所述應用程序對應的組件信息;
[0097] 所述應用程序層利用所述組件信息,在預置的自啟規則中進行匹配,如果匹配成 功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序的自啟行為。
[0098] A2、如A1所述的方法,所述在預置的自啟規則中進行匹配包括:通過所述應用程 序對應的組件類型和/或所述應用程序的運行狀態,確定所述應用程序是否自啟。
[0099] A3、如A2所述的方法,如果根據所述組件信息確定所述組件類型是廣播組件,則 進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用程序并非自啟, 不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知所述框架層控制 所述應用程序的自啟行為。
[0100] A4、如A3所述的方法,所述通知所述框架層控制所述應用程序的自啟行為包括:
[0101] 通過注入框架層的系統服務進程實現動態廣播過濾,當所述應用程序未被喚醒 時,丟棄所有需要該廣播組件處理的廣播,實現預防自啟;當所述應用程序被用戶喚醒后, 啟動所述應用程序。
[0102] A5、如A2所述的方法,如果根據所述組件信息確定所述組件類型是服務組件,則 進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用程序并非自啟, 不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知所述框架層停止 所述應用程序的自啟行為。
[0103] A6、如A5所述的方法,還包括:
[0104] 向用戶發送提示消息,提示用戶已經停止了所述應用程序的自啟行為;
[0105] 當用戶設置允許所述應用程序自啟時,所述應用程序層通知所述框架層不再禁止 所述應用程序的自啟行為。
[0106] A7、如A2所述的方法,如果根據所述組件信息確定所述組件類型是活動組件或提 供者組件,則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行為。
[0107] A8、如A1至A7任一項所述的方法,所述應用程序層的監聽模塊采用hook機制中 斷所述框架層中的所述接口調取所述應用程序對應的組件的過程,從而實現對所述接口的 監聽。
[0108] B9、一種控制應用程序自啟的裝置,包括:
[0109] 監聽單元,用于通過應用程序層通過監聽模塊,對框架層中用于調取所述應用程 序對應的組件的接口進行監聽;
[0110] 組件信息獲取單元,用于通過監聽所述接口,獲取到所述應用程序對應的組件信 息;
[0111]自啟控制單元,用于在所述應用程序層利用所述組件信息,在預置的自啟規則中 進行匹配,如果匹配成功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序 的自啟行為。
[0112] B10、如B9所述的裝置,所述自啟控制單元具體用于:通過所述應用程序對應的組 件類型和/或所述應用程序的運行狀態,確定所述應用程序是否自啟。
[0113] B11、如B10所述的裝置,所述自啟控制單元具體用于:如果根據所述組件信息確 定所述組件類型是廣播組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是, 則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序 是自啟,并通知所述框架層控制所述應用程序的自啟行為。
[0114] B12、如B11所述的裝置,所述自啟控制單元具體用于:通過注入框架層的系統服 務進程實現動態廣播過濾,當所述應用程序未被喚醒時,丟棄所有需要該廣播組件處理的 廣播,實現預防自啟;當所述應用程序被用戶喚醒后,啟動所述應用程序。
[0115] B13、如B10所述的裝置,所述自啟控制單元具體用于:如果根據所述組件信息確 定所述組件類型是服務組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是, 則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序 是自啟,并通知所述框架層停止所述應用程序的自啟行為。
[0116] B14、如B13所述的裝置,還包括:提示單元,向用戶發送提示消息,提示用戶已經 停止了所述應用程序的自啟行為;所述自啟控制單元還用于,當用戶設置允許所述應用程 序自啟時,通過所述應用程序層通知所述框架層不再禁止所述應用程序的自啟行為。
[0117] B15、如B14所述的裝置,所述自啟控制單元具體用于:如果根據所述組件信息確 定所述組件類型是活動組件或提供者組件,則確定所述應用程序并非自啟,不禁止所述應 用程序的啟動行為。
[0118] B16、如B9至B16任一項所述的裝置,所述應用程序層的監聽模塊采用hook機制 中斷所述框架層中的所述接口調取所述應用程序對應的組件的過程,從而實現對所述接口 的監聽。
【權利要求】
1. 一種控制應用程序自啟的方法,其特征在于,包括: 應用程序層通過監聽模塊,對框架層中用于調取所述應用程序對應的組件的接口進行 監聽; 所述應用程序層通過監聽所述接口,獲取到所述應用程序對應的組件信息; 所述應用程序層利用所述組件信息,在預置的自啟規則中進行匹配,如果匹配成功,則 確定所述應用程序自啟,并通知所述框架層控制所述應用程序的自啟行為。
2. 如權利要求1所述的方法,其特征在于,所述在預置的自啟規則中進行匹配包括:通 過所述應用程序對應的組件類型和/或所述應用程序的運行狀態,確定所述應用程序是否 自啟。
3. 如權利要求2所述的方法,其特征在于,如果根據所述組件信息確定所述組件類型 是廣播組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層控制所述應用程序的自啟行為。
4. 如權利要求3所述的方法,其特征在于,所述通知所述框架層控制所述應用程序的 自啟行為包括: 通過注入框架層的系統服務進程實現動態廣播過濾,當所述應用程序未被喚醒時,丟 棄所有需要該廣播組件處理的廣播,實現預防自啟;當所述應用程序被用戶喚醒后,啟動所 述應用程序。
5. 如權利要求2所述的方法,其特征在于,如果根據所述組件信息確定所述組件類型 是服務組件,則進一步判斷所述應用程序是否已經處于運行狀態,如果是,則確定所述應用 程序并非自啟,不禁止所述應用程序的啟動行為,否則,確定所述應用程序是自啟,并通知 所述框架層停止所述應用程序的自啟行為。
6. 如權利要求5所述的方法,其特征在于,還包括: 向用戶發送提示消息,提示用戶已經停止了所述應用程序的自啟行為; 當用戶設置允許所述應用程序自啟時,所述應用程序層通知所述框架層不再禁止所述 應用程序的自啟行為。
7. 如權利要求2所述的方法,其特征在于,如果根據所述組件信息確定所述組件類型 是活動組件或提供者組件,則確定所述應用程序并非自啟,不禁止所述應用程序的啟動行 為。
8. 如權利要求1至7任一項所述的方法,其特征在于,所述應用程序層的監聽模塊采用 hook機制中斷所述框架層中的所述接口調取所述應用程序對應的組件的過程,從而實現對 所述接口的監聽。
9. 一種控制應用程序自啟的裝置,其特征在于,包括: 監聽單元,用于通過應用程序層通過監聽模塊,對框架層中用于調取所述應用程序對 應的組件的接口進行監聽; 組件信息獲取單元,用于通過監聽所述接口,獲取到所述應用程序對應的組件信息; 自啟控制單元,用于在所述應用程序層利用所述組件信息,在預置的自啟規則中進行 匹配,如果匹配成功,則確定所述應用程序自啟,并通知所述框架層控制所述應用程序的自 啟行為。
10.如權利要求9所述的裝置,其特征在于,所述自啟控制單元具體用于:通過所述應 用程序對應的組件類型和/或所述應用程序的運行狀態,確定所述應用程序是否自啟。
【文檔編號】G06F9/445GK104123162SQ201410367202
【公開日】2014年10月29日 申請日期:2014年7月29日 優先權日:2014年7月29日
【發明者】唐淳, 張越 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司