一種安卓系統(tǒng)應(yīng)用關(guān)閉方法和裝置制造方法
【專利摘要】本發(fā)明公開(kāi)了一種安卓系統(tǒng)應(yīng)用關(guān)閉方法,主要涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體包括:監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。本發(fā)明則可以記錄app的進(jìn)程信息,在系統(tǒng)鎖屏后,如果用戶通過(guò)終端的功能鍵觸發(fā)關(guān)閉指令,則可則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉,取得了可在鎖屏狀態(tài)下便捷的關(guān)閉安卓系統(tǒng)中運(yùn)行的非系統(tǒng)必須范圍的進(jìn)程,降低了系統(tǒng)的耗電量有益效果。
【專利說(shuō)明】
一種安卓系統(tǒng)應(yīng)用關(guān)閉方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體涉及一種安卓系統(tǒng)應(yīng)用關(guān)閉方法和裝置。
【背景技術(shù)】
[0002]隨著智能手機(jī)的發(fā)展,出現(xiàn)了多種支持智能手機(jī)的系統(tǒng)。比如android(安卓)系統(tǒng)。Android是一種以Linux為基礎(chǔ)的開(kāi)放源碼操作系統(tǒng),主要使用于手機(jī)等移動(dòng)終端。Android平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。
[0003]隨著Android系統(tǒng)的市場(chǎng)占有率的增加,越來(lái)越多的開(kāi)發(fā)者基于Android系統(tǒng)開(kāi)發(fā)app (applicat1n,應(yīng)用),使用戶使用android手機(jī)更方便。在傳統(tǒng)的安卓系統(tǒng)中,存在一種應(yīng)用關(guān)閉方法,即在系統(tǒng)解鎖狀態(tài),用戶長(zhǎng)按退出功能鍵,即彈出當(dāng)前系統(tǒng)中打開(kāi)的應(yīng)用的窗口界面,然后用戶即可操作關(guān)閉相應(yīng)應(yīng)用。但是其對(duì)應(yīng)用的關(guān)閉,需要先操作系統(tǒng)進(jìn)入解鎖狀態(tài),然后才能進(jìn)入應(yīng)用關(guān)閉過(guò)程。
【發(fā)明內(nèi)容】
[0004]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置和相應(yīng)的一種安卓系統(tǒng)應(yīng)用關(guān)閉方法。
[0005]依據(jù)本發(fā)明的一個(gè)方面,提供了一種安卓系統(tǒng)應(yīng)用關(guān)閉方法,包括:
[0006]監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0007]如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0008]在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;
[0009]如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0010]優(yōu)選地,還包括:
[0011]將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0012]優(yōu)選地,所述通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程包括:
[0013]通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0014]通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0015]優(yōu)選地,所述通過(guò)所述套接字監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括:
[0016]監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0017]優(yōu)選地,所述在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令包括:
[0018]在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)則,則判斷接收到關(guān)閉指令。
[0019]優(yōu)選地,還包括:
[0020]在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0021]將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0022]在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
[0023]優(yōu)選地,在接收到關(guān)閉指令之后,還包括:
[0024]根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0025]進(jìn)一步的,還包括:
[0026]接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0027]優(yōu)選地,所述在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用包括:
[0028]通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0029]如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0030]優(yōu)選地,將所述攔截窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0031]在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0032]創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0033]優(yōu)選地,所述將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0034]將窗口服務(wù)需要加載的初始getfocuswindow函數(shù),替換為第一 getfocuswindow函數(shù);所述第一 getfocuswindow函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程。
[0035]優(yōu)選地,所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象包括:
[0036]通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象。
[0037]優(yōu)選地,還包括:
[0038]在窗口對(duì)象堆棧頂部的窗口對(duì)象發(fā)生變化時(shí),判斷所述窗口對(duì)象是否已經(jīng)獲??;
[0039]如果所述窗口對(duì)象未獲取,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
[0040]根據(jù)本發(fā)明的另一方面,提供了一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置,包括:
[0041]進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0042]進(jìn)行信息記錄模塊,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0043]關(guān)閉觸發(fā)模塊,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;
[0044]進(jìn)程關(guān)閉模塊,適于如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0045]優(yōu)選地,還包括:
[0046]進(jìn)程孵化器替換模塊,適于將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0047]優(yōu)選地,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0048]Java虛擬機(jī)創(chuàng)建模塊,適于通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0049]監(jiān)聽(tīng)套接字注冊(cè)模塊,適于通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0050]優(yōu)選地,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0051]第一進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0052]優(yōu)選地,所述關(guān)閉觸發(fā)模塊包括:
[0053]第一關(guān)閉觸發(fā)模塊,適于在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)貝U,則判斷接收到關(guān)閉指令。
[0054]優(yōu)選地,還包括:
[0055]窗口攔截模塊,適于在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0056]函數(shù)替換模塊,適于將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0057]窗口獲取模塊,適于在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
[0058]優(yōu)選地,在關(guān)閉觸發(fā)模塊之后,還包括:
[0059]窗口展示模塊,適于根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0060]進(jìn)一步的,還包括:
[0061]第二關(guān)閉指令模塊,適于接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0062]優(yōu)選地,所述窗口攔截模塊包括:
[0063]第一監(jiān)聽(tīng)模塊,適于通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0064]第一攔截模塊,適于如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0065]優(yōu)選地,所述函數(shù)替換模塊包括:
[0066]第一函數(shù)替換模塊,適于在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0067]窗口服務(wù)創(chuàng)建模塊,適于創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0068]優(yōu)選地,所述將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0069]第二函數(shù)替換模塊,適于將窗口服務(wù)需要加載的初始getfocuswindow函數(shù),替換為第一 getfocuswindow函數(shù);所述第一 getfocuswindow函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程。
[0070]優(yōu)選地,所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象包括:
[0071]第一窗口對(duì)象獲取模塊,適于通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象。
[0072]優(yōu)選地,還包括:
[0073]窗口對(duì)象判斷模塊,適于在窗口對(duì)象堆棧頂部的窗口對(duì)象發(fā)生變化時(shí),判斷所述窗口對(duì)象是否已經(jīng)獲?。蝗绻龃翱趯?duì)象未獲取,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
[0074]根據(jù)本發(fā)明的一種安卓系統(tǒng)應(yīng)用關(guān)閉方法可以在安卓系統(tǒng)孵化(fork)進(jìn)程開(kāi)始之時(shí),即可獲取進(jìn)程的進(jìn)程信息,對(duì)于系統(tǒng)必須范圍的進(jìn)程,比如systemsever進(jìn)程是安卓系統(tǒng)執(zhí)行的基礎(chǔ)進(jìn)程,包括通話進(jìn)程、通知欄進(jìn)程等,不進(jìn)行記錄,那么對(duì)于除了系統(tǒng)必須進(jìn)程之外的其他進(jìn)程,比如APP(appliCat1n,應(yīng)用)進(jìn)程,本發(fā)明則可以記錄app的進(jìn)程信息。在系統(tǒng)鎖屏后,如果用戶通過(guò)終端的功能鍵觸發(fā)關(guān)閉指令,則可則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述系統(tǒng)必須進(jìn)程不進(jìn)行關(guān)閉,避免將系統(tǒng)相關(guān)進(jìn)程如果關(guān)閉而影響用戶的正常使用,而對(duì)于系統(tǒng)必須進(jìn)程之外的進(jìn)程則可進(jìn)行關(guān)閉。本發(fā)明此解決了系統(tǒng)鎖屏后,無(wú)法快速關(guān)閉安卓系統(tǒng)中運(yùn)行非系統(tǒng)必須范圍外的進(jìn)程的問(wèn)題,取得了可在鎖屏狀態(tài)下便捷的關(guān)閉安卓系統(tǒng)中運(yùn)行的非系統(tǒng)必須范圍的進(jìn)程,降低了系統(tǒng)的耗電量有益效果。
[0075]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【專利附圖】
【附圖說(shuō)明】
[0076]通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0077]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)應(yīng)用關(guān)閉方法的流程示意圖;
[0078]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)窗口對(duì)象獲取方法的流程示意圖;
[0079]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)窗口對(duì)象獲取方法的流程示意圖;
[0080]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖;
[0081]圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖;
[0082]圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0083]下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0084]本發(fā)明的核心思想之一是:在安卓系統(tǒng)孵化(fork)進(jìn)程開(kāi)始之時(shí),即可獲取進(jìn)程的進(jìn)程信息,然后判斷這些進(jìn)程哪些是非安卓系統(tǒng)必須的進(jìn)程(比如systemsever進(jìn)程是安卓系統(tǒng)執(zhí)行的基礎(chǔ)進(jìn)程,systemsever還包括通話進(jìn)程、通知欄進(jìn)程等),對(duì)于不是安卓系統(tǒng)必須的進(jìn)程(比如APP (applicat1n,應(yīng)用)進(jìn)程),本發(fā)明則可以記錄其進(jìn)程信息。然后根據(jù)用戶觸發(fā)的關(guān)閉指令,則可根據(jù)記錄的進(jìn)程信息,將這些進(jìn)程進(jìn)行關(guān)閉。使其可在鎖屏狀態(tài)下便捷的關(guān)閉安卓系統(tǒng)中運(yùn)行的非系統(tǒng)必須范圍之外的進(jìn)程,降低了系統(tǒng)的耗電量。
[0085]實(shí)施例一
[0086]參照?qǐng)D1,其示出了本發(fā)明一種安卓系統(tǒng)應(yīng)用關(guān)閉方法的流程示意圖,包括:
[0087]步驟110,監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0088]在Android系統(tǒng)中,所有的應(yīng)用程序進(jìn)程以及系統(tǒng)服務(wù)進(jìn)程SystemServer都是由zygote進(jìn)程孵化(fork)出來(lái)的,本發(fā)明可以在zygote進(jìn)程孵化其他進(jìn)程時(shí),則對(duì)孵化過(guò)程進(jìn)行監(jiān)聽(tīng),也即監(jiān)聽(tīng)對(duì)進(jìn)程的創(chuàng)建。
[0089]優(yōu)選的,還包括:
[0090]子步驟100,將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0091]在本發(fā)明中,為了實(shí)現(xiàn)進(jìn)程孵化過(guò)程的監(jiān)聽(tīng),需要首先對(duì)android系統(tǒng)初始的進(jìn)程孵化器即zygote進(jìn)程進(jìn)行替換,替換為指定的第一進(jìn)程孵化器,即第一 zygote進(jìn)程,該第一 zygote進(jìn)程可以監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。本發(fā)明可通過(guò)android系統(tǒng)初始的zygote進(jìn)程替換為第一 zygote進(jìn)程實(shí)現(xiàn)監(jiān)聽(tīng)和獲取過(guò)程。
[0092]當(dāng)然,在替換安卓系統(tǒng)初始的zygote進(jìn)程為第一 zygote進(jìn)程后,需要重啟android系統(tǒng)。替換后的第一 zygote進(jìn)程的功能除了包括安卓系統(tǒng)初始的zygote進(jìn)程的功能之外,還添加了監(jiān)聽(tīng)是安卓系統(tǒng)否開(kāi)始孵化進(jìn)程以及監(jiān)聽(tīng)之后的各種處理邏輯。
[0093]當(dāng)然,對(duì)于安卓系統(tǒng),上述替換過(guò)程可預(yù)先獲取系統(tǒng)的root權(quán)限,然后再進(jìn)行替換。
[0094]優(yōu)選的,所述通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程包括:
[0095]子步驟112,通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0096]子步驟113,通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0097]在android系統(tǒng)的正常啟動(dòng)過(guò)程中,大致為:啟動(dòng)系統(tǒng)一〉init進(jìn)程讀取啟動(dòng)init.rc一>init進(jìn)程創(chuàng)建zygote進(jìn)程一>zygote進(jìn)程創(chuàng)建java虛擬機(jī)載入zygotelnit類一> 通過(guò)所述虛擬機(jī)注冊(cè)socket—>等待ActivityManagerService向socket寫(xiě)入創(chuàng)建進(jìn)程的創(chuàng)建消息一〉z(mì)ygote進(jìn)程根據(jù)所述創(chuàng)建消息創(chuàng)建對(duì)應(yīng)進(jìn)程。
[0098]那么本發(fā)明在前述步驟將android系統(tǒng)初始的zygote進(jìn)程替換為本發(fā)明指定的第一 zygote進(jìn)程后,android系統(tǒng)重啟后,其init進(jìn)程即可創(chuàng)建本發(fā)明的第一 zygote進(jìn)程,然后即可第一 zygote進(jìn)程創(chuàng)建java虛擬機(jī),進(jìn)而注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)是安卓系統(tǒng)否開(kāi)始孵化進(jìn)程。
[0099]優(yōu)選的,所述通過(guò)所述套接字監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括:
[0100]子步驟134,監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0101]在本發(fā)明實(shí)施例中在android系統(tǒng)需要?jiǎng)?chuàng)建進(jìn)程時(shí),系統(tǒng)(比如ActivityManagerService)需要向所述監(jiān)聽(tīng)套接字寫(xiě)入創(chuàng)建進(jìn)行的創(chuàng)建消息,那么監(jiān)聽(tīng)所述監(jiān)聽(tīng)套接字中是否接收到創(chuàng)建消息,即可判斷系統(tǒng)是否開(kāi)始孵化進(jìn)程。如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。如果所述監(jiān)聽(tīng)套接字沒(méi)接收到創(chuàng)建消息,則說(shuō)明沒(méi)有進(jìn)程需要孵化。
[0102]步驟120,如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則進(jìn)入步驟130 ;
[0103]步驟130,記錄所述進(jìn)程的進(jìn)程信息;
[0104]在本發(fā)明實(shí)施例中,替換后的第一 zygote進(jìn)程還會(huì)加載一個(gè)進(jìn)程名單,該進(jìn)程名單記錄了系統(tǒng)必須范圍內(nèi)的進(jìn)程,比如systemsever進(jìn)程、WindowManagerService等系統(tǒng)進(jìn)程,這些進(jìn)程如果被關(guān)閉,則會(huì)影響系統(tǒng)本身的正常使用。對(duì)于該進(jìn)程名單之外的進(jìn)程,比如瀏覽器、即時(shí)通訊等APP的進(jìn)程,本發(fā)明則可對(duì)其進(jìn)程信息進(jìn)行記錄,比如記錄進(jìn)程名。在本發(fā)明實(shí)施例中也可將所述進(jìn)程信息返回指定進(jìn)程進(jìn)行記錄。
[0105]然后即可等待后續(xù)步驟。
[0106]步驟140,在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;如果接收到關(guān)閉指令,則進(jìn)入步驟150 ;
[0107]當(dāng)用戶在安裝系統(tǒng)鎖屏后,如果用戶想關(guān)閉其使用時(shí)啟動(dòng)但是未關(guān)閉的APP^J可以在鎖屏狀態(tài)下,按預(yù)先設(shè)置的對(duì)某個(gè)功能按鍵的監(jiān)聽(tīng),比如聲音按鍵,長(zhǎng)按增加聲音鍵3s,則觸發(fā)關(guān)閉指令,系統(tǒng)則需要進(jìn)入關(guān)閉打開(kāi)的app進(jìn)程的步驟。上述預(yù)先設(shè)置的對(duì)某個(gè)功能按鍵的監(jiān)聽(tīng),也可以通過(guò)前述第一 zygote進(jìn)程設(shè)置個(gè)一監(jiān)聽(tīng)邏輯執(zhí)行。
[0108]優(yōu)選的,所述在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令包括:
[0109]子步驟141,在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)則,則判斷接收到關(guān)閉指令。
[0110]在本發(fā)明實(shí)施例中,替換后的第一 zygote進(jìn)程還加載對(duì)指定按鍵的觸發(fā)的預(yù)定規(guī)則邏輯,比如前述鎖屏狀態(tài)下長(zhǎng)按增加聲音鍵3s,則觸發(fā)關(guān)閉指令。那么在后續(xù)系統(tǒng)啟動(dòng)后,監(jiān)聽(tīng)在鎖屏狀態(tài)下對(duì)增加聲音鍵的觸發(fā)。
[0111]當(dāng)然,在本發(fā)明實(shí)施例中,可以在屏幕點(diǎn)亮后接收戶對(duì)指定按鍵的觸發(fā)操作。
[0112]步驟150,根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0113]在操作系統(tǒng)確定接收到關(guān)閉指令后,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。比如根據(jù)記錄的進(jìn)程信息,可以調(diào)用killp1cess函數(shù)對(duì)進(jìn)程進(jìn)行關(guān)閉。
[0114]本發(fā)明實(shí)施例在安卓系統(tǒng)孵化(fork)進(jìn)程開(kāi)始之時(shí),即可獲取進(jìn)程的進(jìn)程信息,那么本發(fā)明可以將非系統(tǒng)必須的進(jìn)程,比如systemsever進(jìn)程等安卓系統(tǒng)執(zhí)行的基礎(chǔ)進(jìn)程、還比如通話進(jìn)程、通知欄進(jìn)程等,不進(jìn)行記錄,以避免在后續(xù)關(guān)閉時(shí)將這些系統(tǒng)相關(guān)進(jìn)程如果關(guān)閉,影響用戶的正常使用,而對(duì)于除了系統(tǒng)必須進(jìn)程之外的其他進(jìn)程,比如APP進(jìn)程,本發(fā)明則可以記錄app的進(jìn)程信息。在系統(tǒng)鎖屏后,如果用戶通過(guò)終端的功能鍵觸發(fā)關(guān)閉指令,則可則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述系統(tǒng)必須進(jìn)程范圍之外的進(jìn)程進(jìn)行關(guān)閉。使其可在鎖屏狀態(tài)下便捷的關(guān)閉安卓系統(tǒng)中運(yùn)行的非系統(tǒng)必須范圍之外的進(jìn)程,降低了系統(tǒng)的耗電量。
[0115]實(shí)施例二
[0116]參照?qǐng)D2,其示出了本發(fā)明一種安卓系統(tǒng)窗口對(duì)象獲取方法的流程示意圖,包括:
[0117]步驟210,監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0118]步驟220,如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0119]步驟230,在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0120]在傳統(tǒng)的viewserver執(zhí)行過(guò)程中,要通過(guò)viewserver去獲取窗口對(duì)象時(shí),需要調(diào)用窗口對(duì)象獲取函數(shù),在viewserver調(diào)用完所述窗口對(duì)象獲取函數(shù)去窗口管理服務(wù)windows manager servive維持的窗口 list堆棧中獲取窗口對(duì)象windostata后,會(huì)返回viewserver,然后再由viewserver通過(guò)外部套接字傳輸所述獲取到窗口對(duì)象的所有數(shù)據(jù)。
[0121]其中,Viewserver是一種服務(wù),可以理解為一個(gè)進(jìn)程。
[0122]而本發(fā)明實(shí)施例,則viewserver調(diào)用所述窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用,然后進(jìn)入步驟120。
[0123]在本發(fā)明實(shí)施例中,可以通過(guò)將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器,然后通過(guò)第一進(jìn)程孵化器實(shí)現(xiàn)在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用。
[0124]優(yōu)選的,所述在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用包括:
[0125]子步驟231,通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0126]在本發(fā)明實(shí)施中在前述將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器時(shí),即對(duì)android系統(tǒng)初始的進(jìn)程孵化器即zygote進(jìn)程進(jìn)行替換,替換為指定的第一zygote進(jìn)程,該第一 zygote進(jìn)程還可以添加監(jiān)聽(tīng)是否開(kāi)始創(chuàng)建viewserver的邏輯,即還可通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)。
[0127]優(yōu)選的,通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括:
[0128]子步驟A2311,通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0129]該步驟與子步驟112是同一個(gè)步驟。
[0130]子步驟A2312,通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,在所述監(jiān)聽(tīng)套接字中添加是否開(kāi)始孵化窗口服務(wù)邏輯,以通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0131]該步驟是在子步驟113執(zhí)行的基礎(chǔ)上,注冊(cè)監(jiān)聽(tīng)套接字時(shí)添加了在所述監(jiān)聽(tīng)套接字中添加是否開(kāi)始孵化窗口服務(wù)邏輯。
[0132]在android系統(tǒng)的正常啟動(dòng)過(guò)程中,大致為:啟動(dòng)系統(tǒng)一〉init進(jìn)程讀取啟動(dòng)init.rc一>init進(jìn)程創(chuàng)建zygote進(jìn)程一>zygote進(jìn)程創(chuàng)建java虛擬機(jī)載入zygotelnit類一> 通過(guò)所述虛擬機(jī)socket—>等待ActivityManagerService向socket寫(xiě)入創(chuàng)建進(jìn)程的創(chuàng)建消息一 >zygote進(jìn)程根據(jù)所述創(chuàng)建消息創(chuàng)建對(duì)應(yīng)進(jìn)程。
[0133]那么本發(fā)明在前述步驟將android系統(tǒng)初始的zygote進(jìn)程替換為本發(fā)明指定的第一 zygote進(jìn)程后,android系統(tǒng)重啟后,其init進(jìn)程即可創(chuàng)建本發(fā)明的第一 zygote進(jìn)程,然后即可第一 zygote進(jìn)程創(chuàng)建java虛擬機(jī),進(jìn)通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,在本發(fā)明的監(jiān)聽(tīng)套接字除了監(jiān)聽(tīng)各個(gè)進(jìn)程的是否開(kāi)始孵化的邏輯,還進(jìn)一步的有針對(duì)viewserver這個(gè)特定的進(jìn)程的監(jiān)聽(tīng)邏輯。
[0134]優(yōu)選的,所述通過(guò)所述套接字監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括:
[0135]子步驟A215,監(jiān)聽(tīng)所述套接字中是否接收到孵化窗口服務(wù)的第一消息;如果所述套接字接收到孵化窗口服務(wù)的第一消息,則確定開(kāi)始孵化窗口服務(wù)。
[0136]上述注冊(cè)的套接字,本發(fā)明實(shí)施例中是監(jiān)聽(tīng)套接字中的接收到的消息。在android系統(tǒng)需要?jiǎng)?chuàng)建進(jìn)程時(shí),系統(tǒng)需要向套接字發(fā)送創(chuàng)建viewserver的第一消息,那么監(jiān)聽(tīng)所述套接字中是否接收到孵化窗口服務(wù)的第一消息,即可判斷系統(tǒng)是否開(kāi)始創(chuàng)建Vi ewserver。如果所述套接字接收到孵化窗口服務(wù)的第一消息,則確定開(kāi)始孵化窗口服務(wù)。如果所述套接字沒(méi)接收到孵化窗口服務(wù)的第一消息,則系統(tǒng)沒(méi)有孵化窗口服務(wù)。
[0137]子步驟232,如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0138]那么本發(fā)明實(shí)施例在監(jiān)聽(tīng)到開(kāi)始創(chuàng)建viewserver后,則攔截對(duì)viewserver的創(chuàng)建。在本發(fā)明實(shí)施例中攔截對(duì)viewserver的創(chuàng)建的過(guò)程為攔截viewserver對(duì)其需要調(diào)用的函數(shù)的加載,比如攔截viewserver對(duì)其需要調(diào)用的窗口對(duì)象獲取函數(shù)的加載。
[0139]步驟240,將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0140]本發(fā)明實(shí)施例將攔截的初始窗口對(duì)象獲取函數(shù),替換為自己的第一窗口對(duì)象獲取函數(shù),即前述第一窗口對(duì)象獲取函數(shù);本發(fā)明實(shí)施例中自己的第一窗口對(duì)象獲取函數(shù)的功能和接口與安卓系統(tǒng)初始的窗口對(duì)象獲取函數(shù)的功能和接口一致,都可去w i n dow smanager servive維持的窗口對(duì)象list堆棧中獲取windowstata,第一窗口對(duì)象獲取函數(shù)只是在獲取到windowstata后返回的對(duì)象變更為本發(fā)明實(shí)施例指定的指定進(jìn)程。
[0141]優(yōu)選的,將所述攔截窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0142]子步驟241,在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0143]在本發(fā)明實(shí)施例中,在前述替換android系統(tǒng)初始的zygote進(jìn)程為本發(fā)明的第一zygote進(jìn)程時(shí),將初始的zygotelnit類替換為本發(fā)明修改后的zygotelnit類的過(guò)程中,在修改后的zygotelnit類中,會(huì)將本發(fā)明需要的第一窗口對(duì)象獲取函數(shù)也加進(jìn)去,該第一窗口對(duì)象獲取函數(shù)在獲取到windowstata之前的過(guò)程與android系統(tǒng)原始的窗口對(duì)象獲取函數(shù)一致,只是第一窗口對(duì)象獲取函數(shù)獲取到windowstata后的返回時(shí)序更改為直接返回指定進(jìn)程。
[0144]子步驟242,創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0145]那么在將android系統(tǒng)初始的窗口對(duì)象獲取函數(shù)替換為本發(fā)明的第一窗口對(duì)象獲取函數(shù)之后,則可繼續(xù)執(zhí)行創(chuàng)建所述viewserver的過(guò)程,倉(cāng)ll建之后則會(huì)加載其所需的函數(shù),其所需的函數(shù)包括所述第一窗口對(duì)象獲取函數(shù)。
[0146]步驟250,在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄;
[0147]在將攔截的初始的窗口對(duì)象獲取函數(shù)替換為本發(fā)明自己的第一窗口對(duì)象獲取函數(shù)之后,繼續(xù)執(zhí)行viewserver的調(diào)用,那么其調(diào)用的即為本發(fā)明的第一窗口對(duì)象獲取函數(shù),該第一窗口對(duì)象獲取函數(shù)獲取到windowstata后返回的對(duì)象變更為本發(fā)明實(shí)施例指定的指定進(jìn)程,那么即可通過(guò)指定進(jìn)程記錄各windowstata的信息。
[0148]當(dāng)所述viewserver調(diào)用所述第一窗口對(duì)象獲取函數(shù)去windows manager servive維持的窗口 list堆棧中獲取到windowstata后,即可直接將所述windowstata通過(guò)viewserver和指定進(jìn)程間的pipe管道返回android系統(tǒng)的指定進(jìn)程。
[0149]步驟260,在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;如果接收到關(guān)閉指令,則進(jìn)入步驟270 ;
[0150]步驟270,根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0151]在本發(fā)明實(shí)施例中,可從指定進(jìn)程記錄的windowstata中,獲取與記錄的進(jìn)程信息對(duì)應(yīng)的windowstata,然后基于這些windowstata中的窗口消息生成相應(yīng)的窗口縮略圖。
[0152]步驟280,接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;
[0153]步驟290,當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0154]比如當(dāng)前系統(tǒng)內(nèi)存中運(yùn)行的app進(jìn)程有A、B、C,那么在步驟280展示A、B、C的窗口縮略圖之后,用戶可以選擇全部關(guān)閉,也可以選擇關(guān)閉某個(gè),那么選擇之后即可根據(jù)記錄的進(jìn)程信息查找該被選擇進(jìn)程的進(jìn)程信息,調(diào)用關(guān)閉函數(shù)對(duì)相應(yīng)的進(jìn)程關(guān)閉。
[0155]優(yōu)選的,還包括:
[0156]步驟292,在窗口對(duì)象堆棧頂部的窗口對(duì)象發(fā)生變化時(shí),判斷所述窗口對(duì)象是否已經(jīng)獲??;
[0157]步驟294,如果所述窗口對(duì)象未獲取,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
[0158]在本發(fā)明實(shí)施例中,因?yàn)榈谝?getfocuswindow函數(shù)是獲取的棧頂?shù)膚indowstata,而棧頂?shù)膚indowstata表示當(dāng)前展示的或者說(shuō)激活應(yīng)用的窗口對(duì)象,其他處于后臺(tái)的窗口對(duì)象則會(huì)在棧頂之下的某個(gè)位置。本發(fā)明實(shí)施例只要棧頂?shù)膚indowstata變化,即android系統(tǒng)當(dāng)前展示的app變化,即可獲取該變化后的windowstata。
[0159]那么本發(fā)明可不斷獲取棧頂?shù)膚indowstata,并且對(duì)已經(jīng)獲取的windowstata進(jìn)行記錄,在下次獲取windowstata之時(shí),根據(jù)前述記錄,如果棧頂?shù)膚indowstata沒(méi)有變化,則不用獲取,如果棧頂?shù)膚indowstata變化了,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
[0160]本發(fā)明實(shí)施例,可以在對(duì)進(jìn)程信息進(jìn)行記錄的同時(shí),也可對(duì)進(jìn)程所對(duì)應(yīng)的窗口對(duì)象進(jìn)行記錄,在鎖屏狀態(tài)下,可以根基記錄的進(jìn)程,展示對(duì)應(yīng)的窗口信息,方便用戶控制關(guān)閉哪些進(jìn)程。使用戶可在鎖屏狀態(tài)下便捷的關(guān)閉安卓系統(tǒng)中運(yùn)行的非系統(tǒng)必須范圍之外的進(jìn)程,降低了系統(tǒng)的耗電量。
[0161]實(shí)施例三
[0162]參照?qǐng)D3,其示出了本發(fā)明一種安卓系統(tǒng)窗口對(duì)象獲取方法的流程示意圖,包括:
[0163]步驟310,將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;
[0164]即將android系統(tǒng)初始的zygote進(jìn)程替換為本發(fā)明預(yù)置的第一 zygote進(jìn)程;第一 zygote進(jìn)程的功能除了包括初始的zygote進(jìn)程的功能之外,還添加了監(jiān)聽(tīng)是否開(kāi)始監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程以及孵化窗口服務(wù)以及監(jiān)聽(tīng)之后的處理邏輯。在替換后,可重啟系統(tǒng),啟動(dòng)系統(tǒng)最開(kāi)始的init進(jìn)程。
[0165]步驟312,通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0166]步驟314,通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,以通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程的以及進(jìn)一步監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化窗口服務(wù);如果監(jiān)聽(tīng)到安卓系統(tǒng)開(kāi)始孵化進(jìn)程,則進(jìn)入步驟316 ;如果監(jiān)聽(tīng)到安卓系統(tǒng)是否開(kāi)始孵化窗口服務(wù),則進(jìn)入步驟322 ;
[0167]步驟316,判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則進(jìn)入步驟318 ;
[0168]步驟318,記錄所述進(jìn)程的進(jìn)程信息;
[0169]步驟322,攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的getfocuswindow函數(shù)的加載;
[0170]步驟324,在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始getfocuswindow 函數(shù),替換為第一 getfocuswindow 函數(shù);所述第一 getfocuswindow 函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程;
[0171]本發(fā)明的第一 getfocuswindow函數(shù)與android系統(tǒng)中本身的初始getfocuswindow函數(shù)具有相同的參數(shù)設(shè)置,只是將系統(tǒng)的初始getfocuswindow函數(shù)的返回對(duì)象修改為了本發(fā)明的指定進(jìn)程。
[0172]步驟326,創(chuàng)建所述窗口服務(wù),并加載所述第一 getfocuswindow函數(shù);
[0173]在替換了上述函數(shù)之后,即可繼續(xù)執(zhí)行進(jìn)程孵化過(guò)程,第一 zygote進(jìn)程可以繼續(xù)創(chuàng)建viewserver,倉(cāng)丨j建后加載第一 getfocuswindow函數(shù)的相關(guān)參數(shù)。
[0174]步驟328,窗口服務(wù)通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象,并將windowstata窗口對(duì)象返回指定進(jìn)程以進(jìn)程窗口對(duì)象的記錄;
[0175]通過(guò)前述步驟之后,在窗口服務(wù)執(zhí)行獲取窗口對(duì)象時(shí),則可調(diào)用所述第一getfocuswindow函數(shù),從存儲(chǔ)窗口對(duì)象的堆棧,獲取棧頂?shù)膚indowstata,然后即可將windowstata通過(guò)viewserver和指定進(jìn)程之間的pipe管道傳返回給指定進(jìn)程。當(dāng)然viewserver和指定進(jìn)程之間的pipe管道可以在使用時(shí)構(gòu)建。
[0176]在本發(fā)明實(shí)施例中,任意一個(gè)app打開(kāi)時(shí),其對(duì)應(yīng)的windowstata均會(huì)在前述堆棧的棧頂,那么通過(guò)上述步驟即可記錄所有打開(kāi)的app的windowstata。
[0177]步驟330,在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;如果接收到關(guān)閉指令,則進(jìn)入步驟332 ;
[0178]步驟332,根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0179]步驟334,接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;
[0180]步驟336,當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0181]實(shí)施例四
[0182]參照?qǐng)D4,其示出了本發(fā)明一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖,包括:
[0183]進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊410,適于監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0184]進(jìn)行信息記錄模塊420,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0185]關(guān)閉觸發(fā)模塊430,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;
[0186]進(jìn)程關(guān)閉模塊440,適于如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0187]優(yōu)選的,還包括:
[0188]進(jìn)程孵化器替換模塊,適于將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0189]優(yōu)選的,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0190]Java虛擬機(jī)創(chuàng)建模塊,適于通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0191]監(jiān)聽(tīng)套接字注冊(cè)模塊,適于通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0192]優(yōu)選的,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0193]第一進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0194]優(yōu)選的,所述關(guān)閉觸發(fā)模塊包括:
[0195]第一關(guān)閉觸發(fā)模塊,適于在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)貝U,則判斷接收到關(guān)閉指令。
[0196]實(shí)施例五
[0197]參照?qǐng)D5,其示出了本發(fā)明一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖,包括:
[0198]進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊510,適于監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0199]進(jìn)行信息記錄模塊520,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0200]窗口攔截模塊530,適于在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0201]函數(shù)替換模塊540,適于將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0202]窗口獲取模塊550,適于在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
[0203]關(guān)閉觸發(fā)模塊560,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;進(jìn)入窗口展示模塊570;
[0204]窗口展示模塊570,適于根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0205]第二關(guān)閉指令模塊580,適于接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;
[0206]進(jìn)程關(guān)閉模塊590,適于當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0207]優(yōu)選的,所述窗口攔截模塊包括:
[0208]第一監(jiān)聽(tīng)模塊,適于通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0209]第一攔截模塊,適于如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0210]優(yōu)選的,所述函數(shù)替換模塊包括:
[0211]第一函數(shù)替換模塊,適于在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0212]窗口服務(wù)創(chuàng)建模塊,適于創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0213]優(yōu)選的,通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始創(chuàng)建窗口服務(wù)。
[0214]優(yōu)選的,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)是否開(kāi)始創(chuàng)建窗口服務(wù)。
[0215]優(yōu)選的,所述窗口攔截模塊包括:
[0216]創(chuàng)建消息監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)所述套接字中是否接收到創(chuàng)建窗口服務(wù)的第一消息;如果所述套接字接收到創(chuàng)建窗口服務(wù)的第一消息,則確定開(kāi)始創(chuàng)建窗口服務(wù)。
[0217]實(shí)施例六
[0218]參照?qǐng)D6,其示出了本發(fā)明一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置的結(jié)構(gòu)示意圖,包括:
[0219]進(jìn)程孵化器替換模塊610,適于將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;
[0220]虛擬機(jī)創(chuàng)建模塊612,適于通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0221]第一窗口服務(wù)創(chuàng)建監(jiān)聽(tīng)模塊614,適于通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,以通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程的以及進(jìn)一步監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化窗口服務(wù);如果監(jiān)聽(tīng)到安卓系統(tǒng)開(kāi)始孵化進(jìn)程,則進(jìn)入進(jìn)程判斷模塊616 ;如果監(jiān)聽(tīng)到安卓系統(tǒng)是否開(kāi)始孵化窗口服務(wù),則進(jìn)入第二攔截模塊622 ;
[0222]進(jìn)程判斷模塊616,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則進(jìn)入進(jìn)程記錄模塊618 ;
[0223]進(jìn)程記錄模塊618,適于記錄所述進(jìn)程的進(jìn)程信息;
[0224]第二攔截模塊622,攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的getfocuswindow函數(shù)的加載;
[0225]第二函數(shù)替換模塊624,適于將窗口服務(wù)需要加載的初始getfocuswindow函數(shù),替換為第一 getfocuswindow函數(shù);所述第一 getfocuswindow函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程;
[0226]窗口服務(wù)創(chuàng)建模塊626,適于創(chuàng)建所述窗口服務(wù),并加載所述第一 getfocuswindow函數(shù);
[0227]第一窗口對(duì)象獲取模塊628,適于窗口服務(wù)通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象,并將windowstata窗口對(duì)象返回指定進(jìn)程;
[0228]通過(guò)上述模塊的記錄,則可為后續(xù)在鎖屏狀態(tài)下關(guān)閉APP進(jìn)程提供數(shù)據(jù)支持。
[0229]關(guān)閉觸發(fā)模塊630,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;進(jìn)入窗口展示模塊632;
[0230]窗口展示模塊632,適于根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0231]第二關(guān)閉指令模塊634,適于接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;
[0232]進(jìn)程關(guān)閉模塊636,適于當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0233]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0234]在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。
[0235]類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書(shū)由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0236]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
[0237]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
[0238]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的安卓系統(tǒng)應(yīng)用關(guān)閉設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
[0239]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
[0240]Al、一種安卓系統(tǒng)應(yīng)用關(guān)閉方法,包括:
[0241]監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0242]如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0243]在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;
[0244]如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0245]A2、如Al所述的方法,還包括:
[0246]將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0247]A3、如A2所述的方法,所述通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程包括:
[0248]通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0249]通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0250]A4、如A3所述的方法,所述通過(guò)所述套接字監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括:
[0251]監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0252]A5、如Al所述的方法,所述在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令包括:
[0253]在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)則,則判斷接收到關(guān)閉指令。
[0254]A6、如A2所述的方法,還包括:
[0255]在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0256]將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0257]在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
[0258]A7、如A6所述的方法,在接收到關(guān)閉指令之后,還包括:
[0259]根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0260]進(jìn)一步的,還包括:
[0261]接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0262]AS、如A6所述的方法,所述在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用包括:
[0263]通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0264]如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0265]A9、如A6所述的方法,將所述攔截窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0266]在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0267]創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0268]A10、如A9所述的方法,所述將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0269]將窗口服務(wù)需要加載的初始getfocuswindow函數(shù),替換為第一 getfocuswindow函數(shù);所述第一 getfocuswindow函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程。
[0270]All、如AlO所述的方法,所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象包括:
[0271]通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象。
[0272]A12、如AlO所述的方法,還包括:
[0273]在窗口對(duì)象堆棧頂部的窗口對(duì)象發(fā)生變化時(shí),判斷所述窗口對(duì)象是否已經(jīng)獲?。?br>
[0274]如果所述窗口對(duì)象未獲取,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
[0275]本發(fā)明還提供了 B13、一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置,包括:
[0276]進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程;
[0277]進(jìn)行信息記錄模塊,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息;
[0278]關(guān)閉觸發(fā)模塊,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令;
[0279]進(jìn)程關(guān)閉模塊,適于如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
[0280]B14、如B13所述的裝置,還包括:
[0281]進(jìn)程孵化器替換模塊,適于將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0282]B15、如B14所述的裝置,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0283]Java虛擬機(jī)創(chuàng)建模塊,適于通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī);
[0284]監(jiān)聽(tīng)套接字注冊(cè)模塊,適于通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
[0285]B16、如B15所述的裝置,所述進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊包括:
[0286]第一進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
[0287]B17、如B13所述的裝置,所述關(guān)閉觸發(fā)模塊包括:
[0288]第一關(guān)閉觸發(fā)模塊,適于在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)貝1J,則判斷接收到關(guān)閉指令。
[0289]B18、如B14所述的裝置,還包括:
[0290]窗口攔截模塊,適于在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用;
[0291]函數(shù)替換模塊,適于將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0292]窗口獲取模塊,適于在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
[0293]B19、如B18所述的裝置,在關(guān)閉觸發(fā)模塊之后,還包括:
[0294]窗口展示模塊,適于根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置;
[0295]進(jìn)一步的,還包括:
[0296]第二關(guān)閉指令模塊,適于接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
[0297]B20、如B18所述的裝置,所述窗口攔截模塊包括:
[0298]第一監(jiān)聽(tīng)模塊,適于通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù);
[0299]第一攔截模塊,適于如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
[0300]B21、如B18所述的裝置,所述函數(shù)替換模塊包括:
[0301]第一函數(shù)替換模塊,適于在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù);
[0302]窗口服務(wù)創(chuàng)建模塊,適于創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
[0303]B22、如B21所述的裝置,所述將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括:
[0304]第二函數(shù)替換模塊,適于將窗口服務(wù)需要加載的初始getfocuswindow函數(shù),替換為第一 getfocuswindow函數(shù);所述第一 getfocuswindow函數(shù)的返回時(shí)序?yàn)榉祷刂付ㄟM(jìn)程。
[0305]B23、如B22所述的裝置,所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象包括:
[0306]第一窗口對(duì)象獲取模塊,適于通過(guò)第一 getfocuswindow函數(shù),查找窗口對(duì)象堆棧頂部的windowstata窗口對(duì)象。
[0307]B24、如B23所述的裝置,還包括:
[0308]窗口對(duì)象判斷模塊,適于在窗口對(duì)象堆棧頂部的窗口對(duì)象發(fā)生變化時(shí),判斷所述窗口對(duì)象是否已經(jīng)獲?。蝗绻龃翱趯?duì)象未獲取,則繼續(xù)將所述窗口對(duì)象返回指定進(jìn)程。
【權(quán)利要求】
1.一種安卓系統(tǒng)應(yīng)用關(guān)閉方法,包括: 監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程; 如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息; 在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令; 如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
2.如權(quán)利要求1所述的方法,其特征在于,還包括: 將安卓系統(tǒng)初始的進(jìn)程孵化器替換為特定的第一進(jìn)程孵化器;通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
3.如權(quán)利要求2所述的方法,其特征在于,所述通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程包括: 通過(guò)所述第一進(jìn)程孵化器創(chuàng)建java虛擬機(jī); 通過(guò)所述java虛擬機(jī)注冊(cè)監(jiān)聽(tīng)套接字,通過(guò)所述監(jiān)聽(tīng)套接字監(jiān)聽(tīng)安卓系統(tǒng)是否開(kāi)始孵化進(jìn)程。
4.如權(quán)利要求3所述的方法,其特征在于,所述通過(guò)所述套接字監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù)包括: 監(jiān)聽(tīng)所述套接字中是否接收到孵化進(jìn)程的創(chuàng)建消息;如果所述監(jiān)聽(tīng)套接字接收到創(chuàng)建消息,則確定開(kāi)始孵化進(jìn)程。
5.如權(quán)利要求1所述的方法,其特征在于,所述在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令包括: 在鎖屏狀態(tài)下,接收用戶對(duì)指定按鍵的觸發(fā)操作,判斷所述對(duì)指定按鍵的觸發(fā)操作是否符合預(yù)定規(guī)則;如果所述對(duì)指定按鍵的觸發(fā)操作符合預(yù)定規(guī)則,則判斷接收到關(guān)閉指令。
6.如權(quán)利要求2所述的方法,其特征在于,還包括: 在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用; 將所述攔截的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù); 在觸發(fā)窗口服務(wù)以獲取窗口對(duì)象時(shí),所述窗口服務(wù)通過(guò)調(diào)用所述第一窗口對(duì)象獲取函數(shù)獲取窗口對(duì)象并返回指定進(jìn)程以進(jìn)行窗口對(duì)象記錄。
7.如權(quán)利要求6所述的方法,其特征在于,在接收到關(guān)閉指令之后,還包括: 根據(jù)進(jìn)程信息與窗口對(duì)象的對(duì)應(yīng)關(guān)系,從對(duì)應(yīng)的窗口對(duì)象中獲取窗口縮略圖,并將所述窗口縮略圖展示在鎖屏界面的指定位置; 進(jìn)一步的,還包括: 接收到用戶針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令;當(dāng)接收到針對(duì)至少一個(gè)窗口縮略圖的第二關(guān)閉指令,根據(jù)所述記錄的進(jìn)程信息,對(duì)相應(yīng)的進(jìn)程進(jìn)行關(guān)閉。
8.如權(quán)利要求6所述的方法,其特征在于,所述在窗口服務(wù)調(diào)用的窗口對(duì)象獲取函數(shù)之前,攔截對(duì)所述安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的調(diào)用包括: 通過(guò)所述第一進(jìn)程孵化器監(jiān)聽(tīng)是否開(kāi)始孵化窗口服務(wù); 如果監(jiān)聽(tīng)到開(kāi)始孵化窗口服務(wù),則攔截對(duì)所述窗口服務(wù)的創(chuàng)建,從而攔截窗口服務(wù)對(duì)其需要調(diào)用的安卓系統(tǒng)中初始窗口對(duì)象獲取函數(shù)的加載。
9.如權(quán)利要求6所述的方法,其特征在于,將所述攔截窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù)包括: 在攔截對(duì)所述窗口服務(wù)的創(chuàng)建后,將窗口服務(wù)需要加載的初始窗口對(duì)象獲取函數(shù)替換為第一窗口對(duì)象獲取函數(shù); 創(chuàng)建所述窗口服務(wù),并加載所述第一窗口對(duì)象獲取函數(shù)。
10.一種安卓系統(tǒng)應(yīng)用關(guān)閉裝置,包括: 進(jìn)程創(chuàng)建監(jiān)聽(tīng)模塊,適于監(jiān)聽(tīng)安卓系統(tǒng)中是否開(kāi)始孵化進(jìn)程; 進(jìn)行信息記錄模塊,適于如果開(kāi)始孵化進(jìn)程,則判斷所述進(jìn)程是否屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程;如果所述進(jìn)程不屬于系統(tǒng)必須范圍內(nèi)的進(jìn)程,則記錄所述進(jìn)程的進(jìn)程信息; 關(guān)閉觸發(fā)模塊,適于在安卓系統(tǒng)鎖屏狀態(tài)下判斷是否接收到用戶觸發(fā)的關(guān)閉指令; 進(jìn)程關(guān)閉模塊,適于如果接收到關(guān)閉指令,則根據(jù)所述記錄的進(jìn)程信息,對(duì)所述進(jìn)程進(jìn)行關(guān)閉。
【文檔編號(hào)】G06F9/46GK104484223SQ201410784204
【公開(kāi)日】2015年4月1日 申請(qǐng)日期:2014年12月16日 優(yōu)先權(quán)日:2014年12月16日
【發(fā)明者】張輝 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司