本申請(qǐng)涉及系統(tǒng)測(cè)試領(lǐng)域,尤其涉及一種界面元素Activity的處理方法以及終端。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,目前智能終端越來(lái)越普及,同時(shí)應(yīng)用于該智能終端的各種軟件的功能也越來(lái)越強(qiáng)大。伴隨著軟件功能的強(qiáng)大,構(gòu)成軟件的界面元素Activity也越來(lái)越多。而目前當(dāng)軟件運(yùn)行時(shí),各Activity會(huì)隨著運(yùn)行過(guò)程進(jìn)行啟動(dòng)或銷毀。
而目前的智能終端中當(dāng)Activity銷毀后,該智能終端采用的回收機(jī)制并不能及時(shí)對(duì)該Activity進(jìn)行回收。
在這種情況下,常常會(huì)導(dǎo)致該已銷毀的Activity一直占用智能終端的內(nèi)存,而在智能終端中被占用的內(nèi)存過(guò)多,就會(huì)導(dǎo)致智能終端在使用過(guò)程中出現(xiàn)卡頓。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種界面元素Activity的處理方法以及終端,用于該終端可以實(shí)時(shí)監(jiān)控已銷毀的Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
第一方面,本申請(qǐng)實(shí)施例提供一種Activity的處理方法,包括:
終端獲取Activity的銷毀狀態(tài);若所述銷毀狀態(tài)指示所述Activity已銷毀,則所述終端為所述Activity建立弱引用;所述終端根據(jù)所述弱引用確定所述Activity回收狀態(tài);若所述回收狀態(tài)指示所述Activity未被回收,則所述終端對(duì)所述Activity進(jìn)行回收。
本申請(qǐng)實(shí)施例提供的技術(shù)方案中,該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
第二方面,本申請(qǐng)實(shí)施例提供一種終端,該終端具有實(shí)現(xiàn)上述方法中終端的功能。該功能可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。該硬件或軟件包括一個(gè)或多個(gè)與上述功能相對(duì)應(yīng)的模塊。
一種可能實(shí)現(xiàn)方式中,該終端包括:
獲取模塊,用于獲取Activity的銷毀狀態(tài);
建立模塊,用于若所述銷毀狀態(tài)指示所述Activity已銷毀,為所述Activity建立弱引用;
確定模塊,用于根據(jù)建立模塊建立的所述弱引用確定所述Activity回收狀態(tài);
處理模塊,用于若所述回收狀態(tài)指示所述Activity未被回收,則對(duì)所述Activity進(jìn)行回收。
另一種可能實(shí)現(xiàn)方式中,該終端包括:
收發(fā)器,處理器,總線;
所述收發(fā)器與所述處理器通過(guò)所述總線相連;
所述處理器,執(zhí)行如下步驟:
獲取Activity的銷毀狀態(tài);若所述銷毀狀態(tài)指示所述Activity已銷毀,為所述Activity建立弱引用;根據(jù)所述弱引用確定所述Activity回收狀態(tài);若所述回收狀態(tài)指示所述Activity未被回收,則對(duì)所述Activity進(jìn)行回收。
第三方面,本申請(qǐng)實(shí)施例提供一種計(jì)算機(jī)存儲(chǔ)介質(zhì),該計(jì)算機(jī)存儲(chǔ)介質(zhì)中存儲(chǔ)有程序代碼,該程序代碼用于指示執(zhí)行上述第一方面的方法。
從以上技術(shù)方案可以看出,本申請(qǐng)實(shí)施例具有以下優(yōu)點(diǎn):該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
附圖說(shuō)明
圖1為本申請(qǐng)實(shí)施例中的Activity處理方法的一個(gè)實(shí)施例示意圖;
圖2為本申請(qǐng)實(shí)施例中的Activity處理方法的另一個(gè)實(shí)施例示意圖;
圖3為本申請(qǐng)實(shí)施例中的Activity處理方法的另一個(gè)實(shí)施例示意圖;
圖4為本申請(qǐng)實(shí)施例中的Activity處理方法的流程示意圖;
圖5為本申請(qǐng)實(shí)施例中的終端的一個(gè)實(shí)施例示意圖;
圖6為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖;
圖7為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖;
圖8為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖;
圖9為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖;
圖10為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖;
圖11為本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例示意圖。
具體實(shí)施方式
本申請(qǐng)實(shí)施例提供了一種界面元素Activity的處理方法以及終端,用于該終端可以實(shí)時(shí)監(jiān)控已銷毀的Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端的操作系統(tǒng)對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
本申請(qǐng)的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三”、“第四”等(如果存在)是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實(shí)施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,目前智能終端越來(lái)越普及,同時(shí)應(yīng)用于該智能終端的各種軟件的功能也越來(lái)越強(qiáng)大。伴隨著軟件功能的強(qiáng)大,構(gòu)成軟件的界面元素Activity也越來(lái)越多。而目前當(dāng)軟件運(yùn)行時(shí),各Activity會(huì)隨著運(yùn)行過(guò)程進(jìn)行啟動(dòng)或銷毀。而目前的智能終端中當(dāng)Activity銷毀后,該智能終端采用的回收機(jī)制并不能及時(shí)對(duì)該Activity進(jìn)行回收。在這種情況下,常常會(huì)導(dǎo)致該已銷毀的Activity一直占用智能終端的內(nèi)存,而在智能終端中被占用的內(nèi)存過(guò)多,就會(huì)導(dǎo)致智能終端在使用過(guò)程中出現(xiàn)卡頓。
為了解決這一問(wèn)題,本申請(qǐng)實(shí)施例提供了如下技術(shù)方案:終端獲取Activity的銷毀狀態(tài);若所述銷毀狀態(tài)指示所述Activity已銷毀,則所述終端為所述Activity建立弱引用;所述終端根據(jù)所述弱引用確定所述Activity回收狀態(tài);若所述回收狀態(tài)指示所述Activity未被回收,則所述終端對(duì)所述Activity進(jìn)行回收。
具體情況請(qǐng)參閱圖1所示,本申請(qǐng)實(shí)施例中的Activity的處理方法的一個(gè)實(shí)施例,包括:
101、終端獲取Activity的銷毀狀態(tài)。
終端獲取安裝在該終端操作系統(tǒng)中的各軟件運(yùn)行時(shí)的Activity的生命周期,根據(jù)該Activity的生命周期中的各狀態(tài)確定該Activity的銷毀狀態(tài)。
本實(shí)施例中,該Activity的生命周期通常會(huì)經(jīng)歷如下幾個(gè)過(guò)程:首先啟動(dòng)Activity,這時(shí)該操作系統(tǒng)會(huì)先調(diào)用on Create方法,然后調(diào)用on Start方法,最后調(diào)用on Resume,以使得該Activity進(jìn)入運(yùn)行狀態(tài);在運(yùn)行過(guò)程中,若該Activity被其他Activity覆蓋或被鎖屏,這時(shí)操作系統(tǒng)會(huì)調(diào)用on Pause方法,以使得該Activity暫停執(zhí)行;若該Activity由被覆蓋狀態(tài)回到前臺(tái)或解鎖屏,這時(shí)操作系統(tǒng)會(huì)調(diào)用on Resume方法,使得該Activity再次進(jìn)入運(yùn)行狀態(tài);若該Activity轉(zhuǎn)到新的Activity或終端界面回到到主屏,即該Activity自身退居后臺(tái),則操作系統(tǒng)會(huì)先調(diào)用on Pause方法,然后調(diào)用on Stop方法,以使得該Activity進(jìn)入停滯狀態(tài);若用戶后退回到該Activity,操作系統(tǒng)會(huì)先調(diào)用on Restart方法,然后調(diào)用on Start方法,最后調(diào)用on Resume方法,以使得該Activity再次進(jìn)入運(yùn)行狀態(tài);若該Activity處于被覆蓋狀態(tài)或者后臺(tái)不可見(jiàn)狀態(tài)且操作系統(tǒng)內(nèi)存不足,該操作系統(tǒng)結(jié)束該Activity,即該Activity被銷毀;若用戶退出該Activity,該操作系統(tǒng)先調(diào)用on Pause方法,然后調(diào)用on Stop方法,最后調(diào)用on Destory方法,結(jié)束該Activity,即該Activity被銷毀。
102、若所述銷毀狀態(tài)指示所述Activity已銷毀,則所述終端為所述Activity建立弱引用。
若該終端在監(jiān)控該Activity的生命周期確定該Activity已被銷毀,則該終端為該Activity建立弱引用。
本實(shí)施例中的弱引用為該Activity的一個(gè)檢查機(jī)制,用于實(shí)時(shí)檢查該Activity的回收狀態(tài)。
103、所述終端根據(jù)所述弱引用確定所述Activity回收狀態(tài)。
該終端根據(jù)該弱引用檢查該Activity,從而確定該Activity的回收狀態(tài)。若該弱引用指示該Activity為空,則該終端確定該Activity已回收;若該弱引用指示該Activity不未空,則該終端確定該Activity未回收。
104、若所述回收狀態(tài)指示所述Activity未被回收,則所述終端對(duì)所述Activity進(jìn)行回收。
若該終端確定該Activity的回收狀態(tài)為未被回收,則該終端立即對(duì)該Activity進(jìn)行回收。
本實(shí)施例中,若該終端確定該Activity的回收狀態(tài)為未被回收時(shí),該終端還可以獲取該終端根據(jù)該弱引用對(duì)于該Activity的檢查次數(shù);若該檢查次數(shù)超過(guò)了預(yù)設(shè)閾值,則該終端需要導(dǎo)出該Activity的內(nèi)存快照文件;并將該內(nèi)存快照文件發(fā)送到分析后臺(tái),以使得該分析后臺(tái)對(duì)該內(nèi)存快照文件進(jìn)行分析并上報(bào)分析結(jié)果;同時(shí)該終端也可以將該檢查次數(shù)增加一次進(jìn)行計(jì)數(shù)。
本實(shí)施例中,該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
下面根據(jù)該終端的操作系統(tǒng)的版本號(hào)的不同,該終端獲取該Activity的銷毀狀態(tài)的方式不同,具體情況如下:
一、該終端的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù)時(shí),具體情況請(qǐng)參閱圖2所示:
201、終端在目標(biāo)應(yīng)用程序的上下文環(huán)境中注冊(cè)界面生命周期的回調(diào)。
終端在目標(biāo)應(yīng)用程序的上下文環(huán)境中注冊(cè)界面生命周期的回調(diào)。
202、終端根據(jù)該界面生命周期的回調(diào)獲取Activity的銷毀狀態(tài)。
該終端在注冊(cè)了界面生命周期的回調(diào)之后,該界面生命周期回調(diào)將會(huì)監(jiān)控該Activity的生命周期,當(dāng)監(jiān)控到該Activity的生命周期結(jié)束時(shí),確定該Activity的銷毀狀態(tài)為已銷毀。
本實(shí)施例中,假如該安卓手機(jī)的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),則該安卓手機(jī)在該手機(jī)QQ運(yùn)行時(shí)在其上下文環(huán)境中注冊(cè)該界面生命周期的回調(diào)register Activity Life cycle Call backs,即該終端實(shí)現(xiàn)了register Activity Life cycle Call backs的接口,然后在接口的方法on Activity Destroyed()里添加了監(jiān)控方法after On Destroy(activity)。該終端就可以使用after On Destroy(activity)對(duì)該QQ的Activity進(jìn)行監(jiān)控,比如該安卓手機(jī)上午8:30時(shí)進(jìn)入了與好友A進(jìn)行聊天的界面,而在上午9:00時(shí)結(jié)束了該好友A的聊天,而安卓手機(jī)界面進(jìn)入了通信錄界面,即該通信錄界面覆蓋了該手機(jī)QQ聊天界面。這時(shí)該終端在手機(jī)QQ的聊天界面為不可見(jiàn)狀態(tài),這時(shí)該操作系統(tǒng)會(huì)根據(jù)該操作系統(tǒng)的內(nèi)存確定是否銷毀該手機(jī)QQ的聊天界面。若該操作系統(tǒng)在確定內(nèi)存不足時(shí),銷毀了該手機(jī)QQ的聊天界面,這時(shí)該after On Destroy(activity)可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。同時(shí),若該用戶直接退出了手機(jī)QQ,這時(shí)該手機(jī)QQ的聊天界面將會(huì)直接被銷毀,這時(shí)該after On Destroy(activity)也可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。
203、若所述銷毀狀態(tài)指示所述Activity已銷毀,則所述終端為所述Activity建立弱引用。
若終端在監(jiān)控該Activity的生命周期確定該Activity已被銷毀,則該終端為該Activity建立弱引用。
204、所述終端根據(jù)所述弱引用確定所述Activity回收狀態(tài)。
該終端根據(jù)該弱引用檢查該Activity,從而確定該Activity的回收狀態(tài)。若該弱引用指示該Activity為空,則該終端確定該Activity已回收;若該弱引用指示該Activity不未空,則該終端確定該Activity未回收。
205、若所述回收狀態(tài)指示所述Activity未被回收,則所述終端對(duì)所述Activity進(jìn)行回收。
若該終端確定該Activity的回收狀態(tài)為未被回收,則該終端立即對(duì)該Activity進(jìn)行回收。
本實(shí)施例中,若該終端確定該Activity的回收狀為未被回收時(shí),該終端還可以獲取該終端根據(jù)該弱引用對(duì)于該Activity的檢查次數(shù);若該檢查次數(shù)超過(guò)了預(yù)設(shè)閾值,則該終端需要導(dǎo)出該Activity的內(nèi)存快照文件;并將該內(nèi)存快照文件發(fā)送到分析后臺(tái),以使得該分析后臺(tái)對(duì)該內(nèi)存快照文件進(jìn)行分析并上報(bào)分析結(jié)果;同時(shí)該終端也可以將該檢查次數(shù)增加一次進(jìn)行計(jì)數(shù)。
本實(shí)施例中,該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
二、該終端的操作系統(tǒng)未提供界面生命周期回調(diào)函數(shù)時(shí),具體情況請(qǐng)參閱圖3所示:
301、終端獲取界面生命周期變量。
該終端根據(jù)反射系統(tǒng)類變量獲取界面生命周期變量。
302、終端將該界面生命周期變量替換為預(yù)設(shè)界面生命周期變量。
該終端在獲取到該界面生命周期變量之后將其替換為預(yù)設(shè)界面生命周期變量。該預(yù)設(shè)界面生命周期用于監(jiān)控該Activity的生命周期。
若該安卓手機(jī)的操作系統(tǒng)版未提供界面生命周期回調(diào)函數(shù),則該安卓手機(jī)在手機(jī)QQ運(yùn)行的過(guò)程中反射系統(tǒng)類變量從而獲取該手機(jī)QQ的界面生命周期變量,然后將該手機(jī)QQ的界面生命周期變量用預(yù)設(shè)界面生命周期變量替換,從而生成監(jiān)控方法after On Destroy(activity),該終端就可以使用after On Destroy(activity)對(duì)該QQ的Activity進(jìn)行監(jiān)控,比如該安卓手機(jī)上午8:30時(shí)進(jìn)入了與好友A進(jìn)行聊天的界面,而在上午9:00時(shí)結(jié)束了該好友A的聊天,而安卓手機(jī)界面進(jìn)入了通信錄界面,即該通信錄界面覆蓋了該手機(jī)QQ聊天界面。這時(shí)該終端在手機(jī)QQ的聊天界面已為不可見(jiàn)狀態(tài),這時(shí)該操作系統(tǒng)會(huì)根據(jù)該操作系統(tǒng)的內(nèi)存確定是否銷毀該手機(jī)QQ的聊天界面。若該操作系統(tǒng)在確定內(nèi)存不足時(shí),銷毀了該手機(jī)QQ的聊天界面,這時(shí)該after On Destroy(activity)可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。同時(shí),若該用戶直接退出了手機(jī)QQ,這時(shí)該手機(jī)QQ的聊天界面將會(huì)直接被銷毀,這時(shí)該after On Destroy(activity)也可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。
303、終端根據(jù)該預(yù)設(shè)界面生命周期變量獲取Activity的銷毀狀態(tài)。
當(dāng)該終端確定該預(yù)設(shè)界面生命周期變量監(jiān)控到該Activity的生命周期已結(jié)束時(shí),則確定該Activity的銷毀狀態(tài)為已銷毀。
304、若所述銷毀狀態(tài)指示所述Activity已銷毀,則所述終端為所述Activity建立弱引用。
若該終端在監(jiān)控該Activity的生命周期確定該Activity已銷毀,則該終端為該Activity建立弱引用。
305、所述終端根據(jù)所述弱引用確定所述Activity回收狀態(tài)。
該終端根據(jù)該弱引用檢查該Activity,從而確定該Activity的回收狀態(tài)。若該弱引用指示該Activity為空,則該終端確定該Activity已回收;若該弱引用指示該Activity不未空,則該終端確定該Activity未回收。
306、若所述回收狀態(tài)指示所述Activity未被回收,則所述終端對(duì)所述Activity進(jìn)行回收。
若該終端確定該Activity的回收狀態(tài)為未被回收,則該終端立即對(duì)該Activity進(jìn)行回收。
本實(shí)施例中,若該終端確定該Activity的回收狀為未被回收時(shí),該終端還可以獲取該終端根據(jù)該弱引用對(duì)于該Activity的檢查次數(shù);若該檢查次數(shù)超過(guò)了預(yù)設(shè)閾值,則該終端需要導(dǎo)出該Activity的內(nèi)存快照文件;并將該內(nèi)存快照文件發(fā)送到分析后臺(tái),以使得該分析后臺(tái)對(duì)該內(nèi)存快照文件進(jìn)行分析并上報(bào)分析結(jié)果;同時(shí)該終端也可以將該檢查次數(shù)增加一次進(jìn)行計(jì)數(shù)。
本實(shí)施例中,該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
為了便于理解,本申請(qǐng)實(shí)施例中以一個(gè)實(shí)際場(chǎng)景進(jìn)行描述,本申請(qǐng)實(shí)施例中以安卓手機(jī)為例,同時(shí)該安卓手機(jī)正在運(yùn)行手機(jī)QQ。
假如該安卓手機(jī)的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),則該安卓手機(jī)在該手機(jī)QQ運(yùn)行時(shí)在其上下文環(huán)境中注冊(cè)該界面生命周期的回調(diào)register Activity Life cycle Call backs,即該終端實(shí)現(xiàn)了register Activity Life cycle Call backs的接口,然后在接口的方法on Activity Destroyed()里添加了監(jiān)控方法after On Destroy(activity)。該終端就可以使用after On Destroy(activity)對(duì)該QQ的Activity進(jìn)行監(jiān)控,比如該安卓手機(jī)上午8:30時(shí)進(jìn)入了與好友A進(jìn)行聊天的界面,而在上午9:00時(shí)結(jié)束了該好友A的聊天,而安卓手機(jī)界面進(jìn)入了通信錄界面,即該手機(jī)QQ的聊天界面此時(shí)處于不可見(jiàn)狀態(tài)。這時(shí)該手機(jī)的操作系統(tǒng)會(huì)根據(jù)該操作系統(tǒng)的內(nèi)存確定是否銷毀該手機(jī)QQ的聊天界面。若該操作系統(tǒng)在確定內(nèi)存不足時(shí),銷毀了該手機(jī)QQ的聊天界面,這時(shí)該after On Destroy(activity)可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。同時(shí),若該用戶直接退出了手機(jī)QQ,這時(shí)該手機(jī)QQ的聊天界面將會(huì)直接被銷毀,這時(shí)該after On Destroy(activity)也可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。若該安卓手機(jī)的操作系統(tǒng)未提供界面生命周期回調(diào)函數(shù),則該安卓手機(jī)在手機(jī)QQ運(yùn)行的過(guò)程中反射系統(tǒng)類變量從而獲取該手機(jī)QQ的界面生命周期變量,然后將該手機(jī)QQ的界面生命周期變量用預(yù)設(shè)界面生命周期變量替換,從而生成監(jiān)控方法after On Destroy(activity),該終端就可以使用after On Destroy(activity)對(duì)該QQ的Activity進(jìn)行監(jiān)控,比如該安卓手機(jī)上午8:30時(shí)進(jìn)入了與好友A進(jìn)行聊天的界面,而在上午9:00時(shí)結(jié)束了該好友A的聊天,而安卓手機(jī)界面進(jìn)入了通信錄界面,即該通信錄界面覆蓋了該手機(jī)QQ聊天界面。這時(shí)該終端在手機(jī)QQ的聊天界面已為不可見(jiàn)狀態(tài),這時(shí)該操作系統(tǒng)會(huì)根據(jù)該操作系統(tǒng)的內(nèi)存確定是否銷毀該手機(jī)QQ的聊天界面。若該操作系統(tǒng)在確定內(nèi)存不足時(shí),銷毀了該手機(jī)QQ的聊天界面,這時(shí)該after On Destroy(activity)可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。同時(shí),若該用戶直接退出了手機(jī)QQ,這時(shí)該手機(jī)QQ的聊天界面將會(huì)直接被銷毀,這時(shí)該after On Destroy(activity)也可以監(jiān)控到該終端在手機(jī)QQ的聊天界面已銷毀。該手機(jī)在獲取到手機(jī)QQ的聊天界面的銷毀狀態(tài)之后,若該手機(jī)確定該手機(jī)QQ的聊天界面的銷毀狀態(tài)為已銷毀,則該手機(jī)為該手機(jī)QQ的聊天界面建立弱引用,并根據(jù)該弱引用檢查該手機(jī)QQ的聊天界面的回收狀態(tài),若該弱引用指示該手機(jī)QQ的聊天界面為空,即不存在了,則該安卓手機(jī)確定該手機(jī)QQ的聊天界面已被回收,這時(shí)該安卓手機(jī)結(jié)束該弱引用;若該弱引用指示該手機(jī)QQ的聊天界面不為空,即還存在,則該安卓手機(jī)確定該手機(jī)QQ的聊天界面未被回收。這時(shí)安卓手機(jī)將會(huì)獲取該弱引用檢查該手機(jī)QQ的聊天界面是否已回收的次數(shù),若該次數(shù)超過(guò)了預(yù)設(shè)閾值,比如5次,則該安卓手機(jī)導(dǎo)出該手機(jī)QQ的聊天界面的內(nèi)存快照文件,并將該內(nèi)存快照文件發(fā)送至分析后臺(tái),然后該分析后臺(tái)分析該內(nèi)存快照文件并上報(bào)分析結(jié)果。若該次數(shù)未超過(guò)該預(yù)設(shè)閾值,比如檢查次數(shù)為4沒(méi)超過(guò)5次,則該安卓手機(jī)主動(dòng)回收該手機(jī)QQ的聊天界面并將該弱引用檢查該手機(jī)QQ的聊天界面的次數(shù)增加一次。
下面對(duì)本申請(qǐng)實(shí)施例中技術(shù)方案的流程進(jìn)行描述,具體如圖4所示,
該終端啟動(dòng)軟件,然后判斷該終端的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),在實(shí)際應(yīng)用中,也可以直接判斷操作系統(tǒng)的版本號(hào)。若終端的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),則該終端在該軟件運(yùn)行時(shí)在其上下文環(huán)境中注冊(cè)該界面生命周期的回調(diào)register Activity Life cycle Call backs,即該終端實(shí)現(xiàn)了register Activity Life cycle Call backs的接口,然后在接口的方法on Activity Destroyed()里添加了監(jiān)控方法after On Destroy(activity)。該終端就可以使用after On Destroy(activity)對(duì)該軟件的Activity進(jìn)行監(jiān)控。若該終端的操作系統(tǒng)未提供界面生命周期回調(diào)函數(shù),則該終端在軟件運(yùn)行的過(guò)程中反射系統(tǒng)類變量從而獲取該軟件的界面生命周期變量,然后將該軟件的界面生命周期變量用預(yù)設(shè)界面生命周期變量替換,從而生成監(jiān)控方法after On Destroy(activity),該終端就可以使用after On Destroy(activity)對(duì)該軟件的Activity進(jìn)行監(jiān)控。該終端在獲取到軟件的聊天界面的銷毀狀態(tài)之后,在該銷毀狀態(tài)指示該Activity已銷毀時(shí),該終端為該軟件的聊天界面建立弱引用,并根據(jù)該弱引用檢查該軟件的Activity的回收狀態(tài),若該弱引用指示該Activity為空,即不存在了,則該終端確定該Activity已被回收,這時(shí)該終端結(jié)束該弱引用;若該弱引用指示該Activity不為空,即還存在,則該終端確定該Activity未被回收。這時(shí)終端將會(huì)獲取該弱引用檢查該Activity是否已回收的次數(shù),若該次數(shù)超過(guò)了預(yù)設(shè)閾值,比如5次,則該終端導(dǎo)出該Activity的內(nèi)存快照文件,并將該內(nèi)存快照文件發(fā)送至分析后臺(tái),然后該分析后臺(tái)分析該內(nèi)存快照文件并上報(bào)分析結(jié)果。若該次數(shù)未超過(guò)該預(yù)設(shè)閾值,比如檢查次數(shù)為4沒(méi)超過(guò)5次,則該終端主動(dòng)回收該Activity并將該弱引用檢查該Activity的次數(shù)增加一次。
上面對(duì)本申請(qǐng)實(shí)施例中的Activity的處理方法進(jìn)行了描述,下面對(duì)本申請(qǐng)實(shí)施例中的終端進(jìn)行描述。
具體情況請(qǐng)參閱圖5所示,本申請(qǐng)實(shí)施例中終端的一個(gè)實(shí)施例,包括:
獲取模塊501,用于獲取Activity的銷毀狀態(tài);
建立模塊502,用于若所述銷毀狀態(tài)指示所述Activity已銷毀,為所述Activity建立弱引用;
確定模塊503,用于根據(jù)建立模塊建立的所述弱引用確定所述Activity回收狀態(tài);
處理模塊504,用于若所述回收狀態(tài)指示所述Activity未被回收,則對(duì)所述Activity進(jìn)行回收。
基于圖5所示的終端,具體如圖6所示,本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例,包括:
所述獲取模塊501包括:
監(jiān)控單元5011,用于若所述終端上安裝的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),則通過(guò)注冊(cè)界面生命周期的回調(diào)的方法監(jiān)控所述Activity的銷毀狀態(tài);
獲取單元5012,用于若所述終端上安裝的操作系統(tǒng)未提供界面生命周期回調(diào)函數(shù),則通過(guò)用預(yù)設(shè)的界面生命周期的變量替換所述操作系統(tǒng)的界面生命周期的變量獲取所述Activity的銷毀狀態(tài)。
基于圖5所示的終端,具體如圖7所示,本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例,包括:
所述確定模塊502包括:
第一確定單元5021,用于若所述弱引用指示所述Activity為空,則確定所述Activity已被回收;
第二確定單元5023,用于若所述弱引用指示所述Activity不為空,則確定所述Activity未被回收。
基于圖5所示的終端,具體如圖8所示,本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例,包括:
所述終端還包括:
結(jié)束模塊505,用于若確定所述Activity已被回收,則結(jié)束所述弱引用。
基于圖5所示的終端,具體如圖9所示,本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例,包括:
所述獲取模塊501,還用于若所述回收狀態(tài)指示所述Activity未被回收,則獲取根據(jù)所述弱引用確定所述Activity回收狀態(tài)的檢查次數(shù);
判斷模塊506,用于判斷所述檢查次數(shù)是否超過(guò)預(yù)設(shè)閾值,若是,則所述終端導(dǎo)出所述Activity的內(nèi)存快照文件;
發(fā)送模塊507,用于將所述內(nèi)存快照文件發(fā)送至分析后臺(tái),以使得所述分析后臺(tái)對(duì)所述內(nèi)存快照文件進(jìn)行分析后上報(bào)分析結(jié)果。
基于圖9所示的終端,具體如圖10所示,本申請(qǐng)實(shí)施例中的終端的另一個(gè)實(shí)施例,包括:
所述終端還包括:
計(jì)數(shù)模塊508,用于若所述檢查次數(shù)未超過(guò)所述預(yù)設(shè)閾值,則將所述檢查次數(shù)增加1。
本實(shí)施例中,該終端在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
本申請(qǐng)實(shí)施例還提供了一種移動(dòng)終端,該移動(dòng)終端可以是手機(jī)。如圖11所示,為了便于說(shuō)明,僅示出了與本申請(qǐng)實(shí)施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請(qǐng)參照本申請(qǐng)實(shí)施例方法部分。
圖11示出的是與本發(fā)明實(shí)施例提供的移動(dòng)終端1100的部分結(jié)構(gòu)的框圖。參考圖11,移動(dòng)終端包括:攝像頭1110、存儲(chǔ)器1120、輸入單元1130、顯示單元1140、傳感器1150、音頻電路1160、Wi-Fi模塊1170、處理器1180、以及電源1190等部件。本領(lǐng)域技術(shù)人員可以理解,圖11中示出的移動(dòng)終端結(jié)構(gòu)并不構(gòu)成對(duì)移動(dòng)終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
下面結(jié)合圖11對(duì)移動(dòng)終端的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:
攝像頭1110可用于拍攝;
存儲(chǔ)器1120可用于存儲(chǔ)軟件程序以及模塊,處理器1180通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器1120的軟件程序以及模塊,從而執(zhí)行移動(dòng)終端的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲(chǔ)器1120可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)移動(dòng)終端的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲(chǔ)器1120可以包括易失性存儲(chǔ)器(volatile memory),例如隨機(jī)存取存儲(chǔ)器(random-access memory,簡(jiǎn)稱RAM);存儲(chǔ)器也可以包括非易失性存儲(chǔ)器(non-volatile memory),例如快閃存儲(chǔ)器(flash memory),硬盤(pán)(hard disk drive,簡(jiǎn)稱HDD)或固態(tài)硬盤(pán)(solid-state drive,簡(jiǎn)稱SSD);存儲(chǔ)器1004還可以包括上述種類的存儲(chǔ)器的組合。輸入單元1130可用于接收用戶的操作指令,如:輸入點(diǎn)擊操作位置,以及產(chǎn)生與移動(dòng)終端1100的用戶設(shè)置以及功能控制有關(guān)的鍵信號(hào)輸入。具體地,輸入單元1130可包括觸控面板1131以及其他輸入設(shè)備1132。觸控面板1131,也稱為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板1131上或在觸控面板1131附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接移動(dòng)終端??蛇x的,觸控面板1131可包括觸摸檢測(cè)移動(dòng)終端和觸摸控制器兩個(gè)部分。其中,觸摸檢測(cè)移動(dòng)終端檢測(cè)用戶的觸摸方位,并檢測(cè)觸摸操作帶來(lái)的信號(hào),將信號(hào)傳送給觸摸控制器;觸摸控制器從觸摸檢測(cè)移動(dòng)終端上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器1180,并能接收處理器1180發(fā)來(lái)的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實(shí)現(xiàn)觸控面板1131。除了觸控面板1131,輸入單元1130還可以包括其他輸入設(shè)備1132。具體地,其他輸入設(shè)備1132可以包括但不限于物理鍵盤(pán)、功能鍵(比如音量控制按鍵、開(kāi)關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。
顯示單元1140可用于顯示視頻內(nèi)容。顯示單元1140可包括指示燈1141,可選的,可以采用液晶顯示器(Liquid Crystal Display,LCD)、有機(jī)發(fā)光二極管(Organic Light-Emitting Diode,OLED)等形式來(lái)配置指示燈1141。進(jìn)一步的,觸控面板1131可覆蓋指示燈1141,當(dāng)觸控面板1131檢測(cè)到在其上或附近的觸摸操作后,傳送給處理器1180以確定觸摸事件的類型,隨后處理器1180根據(jù)觸摸事件的類型在指示燈1141上提供相應(yīng)的視覺(jué)輸出。雖然在圖11中,觸控面板1131與指示燈1141是作為兩個(gè)獨(dú)立的部件來(lái)實(shí)現(xiàn)移動(dòng)終端的輸入和輸入功能,但是在某些實(shí)施例中,可以將觸控面板1131與指示燈1141集成而實(shí)現(xiàn)移動(dòng)終端的輸入和輸出功能。
移動(dòng)終端1100還可包括至少一種傳感器1150。音頻電路1160、揚(yáng)聲器1161,傳聲器1162可提供用戶與移動(dòng)終端之間的音頻接口。音頻電路1160可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號(hào),傳輸?shù)綋P(yáng)聲器1161,由揚(yáng)聲器1161轉(zhuǎn)換為聲音信號(hào)輸出;另一方面,傳聲器1162將收集的聲音信號(hào)轉(zhuǎn)換為電信號(hào),由音頻電路1160接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器1180處理后,經(jīng)攝像頭1110以發(fā)送給比如另一移動(dòng)終端,或者將音頻數(shù)據(jù)輸出至存儲(chǔ)器1120以便進(jìn)一步處理。
WiFi模塊1170可以用于無(wú)線通信。
處理器1180是移動(dòng)終端的控制中心,利用各種接口和線路連接整個(gè)移動(dòng)終端的各個(gè)部分,通過(guò)運(yùn)行或執(zhí)行存儲(chǔ)在存儲(chǔ)器1120內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲(chǔ)在存儲(chǔ)器1120內(nèi)的數(shù)據(jù),執(zhí)行移動(dòng)終端的各種功能和處理數(shù)據(jù),從而對(duì)移動(dòng)終端進(jìn)行整體監(jiān)控。可選的,處理器1180可包括一個(gè)或多個(gè)處理單元;優(yōu)選的,處理器1180可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無(wú)線通信。可以理解的是,上述調(diào)制解調(diào)處理器也可以不集成到處理器1180中。處理器1180可以是中央處理器(central processing unit,簡(jiǎn)稱CPU),網(wǎng)絡(luò)處理器(network processor,簡(jiǎn)稱NP)或者CPU和NP的組合。處理器1180還可以進(jìn)一步包括硬件芯片。上述硬件芯片可以是專用集成電路(application-specific integrated circuit,簡(jiǎn)稱ASIC),可編程邏輯器件(programmable logic device,簡(jiǎn)稱PLD)或其組合。上述PLD可以是復(fù)雜可編程邏輯器件(complex programmable logic device,簡(jiǎn)稱CPLD),現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(field-programmable gate array,簡(jiǎn)稱FPGA),通用陣列邏輯(generic array logic,簡(jiǎn)稱GAL)或其任意組合。
移動(dòng)終端1100還包括給各個(gè)部件供電的電源1190(比如電池),優(yōu)選的,電源可以通過(guò)電源管理系統(tǒng)與處理器1180邏輯相連,從而通過(guò)電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。
盡管未示出,移動(dòng)終端1100還可以包括射頻(Radio Frequency,RF)電路、藍(lán)牙模塊等,在此不再贅述。
本實(shí)施例中,該處理器1180,執(zhí)行如下步驟:
獲取Activity的銷毀狀態(tài);若所述銷毀狀態(tài)指示所述Activity已銷毀,為所述Activity建立弱引用;根據(jù)所述弱引用確定所述Activity回收狀態(tài);若所述回收狀態(tài)指示所述Activity未被回收,則對(duì)所述Activity進(jìn)行回收。
可選的,該處理器1180,具體執(zhí)行如下步驟:若所述終端上安裝的操作系統(tǒng)提供界面生命周期回調(diào)函數(shù),則通過(guò)注冊(cè)界面生命周期的回調(diào)的方法監(jiān)控所述Activity的銷毀狀態(tài);若所述終端上安裝的操作系統(tǒng)未提供界面生命周期回調(diào)函數(shù),則通過(guò)用預(yù)設(shè)的界面生命周期的變量替換所述操作系統(tǒng)的界面生命周期的變量獲取所述Activity的銷毀狀態(tài)。
可選的,該處理器1180,具體執(zhí)行如下步驟:若所述弱引用指示所述Activity為空,則確定所述Activity已被回收;若所述弱引用指示所述Activity不為空,則確定所述Activity未被回收。
可選的,該處理器1180,具體執(zhí)行如下步驟:若確定所述Activity已被回收,則結(jié)束所述弱引用。
可選的,該處理器1180,具體執(zhí)行如下步驟:若所述回收狀態(tài)指示所述Activity未被回收,則獲取根據(jù)所述弱引用確定所述Activity回收狀態(tài)的檢查次數(shù);判斷所述檢查次數(shù)是否超過(guò)預(yù)設(shè)閾值,若是,則所述終端導(dǎo)出所述Activity的內(nèi)存快照文件;
輸入設(shè)備1132,具體執(zhí)行如下步驟:將所述內(nèi)存快照文件發(fā)送至分析后臺(tái),以使得所述分析后臺(tái)對(duì)所述內(nèi)存快照文件進(jìn)行分析后上報(bào)分析結(jié)果。
可選的,該處理器1180,具體執(zhí)行如下步驟:若所述檢查次數(shù)未超過(guò)所述預(yù)設(shè)閾值,則將所述檢查次數(shù)增加1。
可選的,所述終端為安卓終端。
本實(shí)施例中,該處理器1180在確定該Activity已被銷毀之后,利用弱引用檢查該Activity的回收狀態(tài),并在該Activity未回收的情況下及時(shí)提醒該終端對(duì)該Activity進(jìn)行回收,從而減少終端的內(nèi)存占用,進(jìn)而減少終端的卡頓。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說(shuō)明本申請(qǐng)的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本申請(qǐng)進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本申請(qǐng)各實(shí)施例技術(shù)方案的精神和范圍。