[發明專利]一種檢測Android應用Service構件泄露的高效方法有效
| 申請號: | 201710790636.4 | 申請日: | 2017-09-05 |
| 公開(公告)號: | CN107590013B | 公開(公告)日: | 2020-12-04 |
| 發明(設計)人: | 馬駿;陶先平;呂建 | 申請(專利權)人: | 南京大學 |
| 主分類號: | G06F11/07 | 分類號: | G06F11/07;G06F11/36 |
| 代理公司: | 南京知識律師事務所 32207 | 代理人: | 張蘇沛 |
| 地址: | 210046 江蘇*** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 檢測 android 應用 service 構件 泄露 高效 方法 | ||
1.一種安卓應用Service構件泄露的高效檢測方法,其特征在于:分為主程序Master與客戶端檢測應用APKchecker兩部分;主程序Master運行在PC端,客戶端檢測應用APKchecker運行在測試安卓設備上,其具體步驟包括:
步驟一、主程序Master借助Android-Debug-Bridge安裝待檢測應用APKtarget;
步驟二、主程序Master借助Android-Debug-Bridge安裝客戶端檢測應用APKchecker;
步驟三、主程序Master以“Start模式”啟動客戶端檢測應用APKchecker;
步驟四、客戶端檢測應用APKchecker以“Start模式”嘗試檢測待測應用所發布的各項服務;
步驟五、主程序Master記錄相應應用堆棧內存;
步驟六、主程序Master以“Bind模式”啟動客戶端檢測應用APKchecker嘗試檢測待測應用所發布的各項服務;
步驟七、客戶端檢測應用APKchecker以“Bind模式”嘗試檢測待測應用所發布的各項服務;
步驟八、主程序Master記錄相應應用堆棧內存;
步驟九、分析獲取得到的應用堆棧內存,檢測泄露的應用構件;
步驟九具體包括以下步驟:
步驟9.1、針對一個轉儲的應用堆棧.hprof文件,首先獲取其中所包含的所有Service對象實例,用Ssrv表示;
步驟9.2、針對步驟9.1所獲得的每一個Service對象實例s進行逐個鑒別,判定s是否已經被銷毀,若s被判定為已銷毀,則將其從Ssrv中刪除;
所述步驟9.2判定一個Service實例s是否被銷毀,則是依據該s是否被某個ActivityThread實例所管理,即判斷是否存在如下的引用關系序列:at→mServices→array[]→s,其中at表示一個ActivityThread實例;若存在這樣一個引用關系序列,則s被at表示的ActivityThread實例所管理;否則,s則被認為是被銷毀的;
步驟9.3、針對步驟9.2處理后得到的Ssrv中的剩余對象實例s,進一步判定其是否是泄露的,若是則將其從Ssrv中刪除;
所述步驟9.3判定一個Service實例s是否泄露,具體包括以下步驟:
步驟9.3.1、獲取Service實例s到達所有GC root的路徑,記為LP;
步驟9.3.2、從LP中去除所有包含java.lang.ref.SoftReference、java.lang.ref.WeakReference、java.lang.ref.PhantomReference、java.lang.ref.FinalizerReference以及java.lang.ref.Finalizer類型對象的路徑;從LP中去除所有以java.lang.Daemons$FinalizerDaemon類對象結尾的路徑,同時從LP中去除包含FinalizerWatchdogDaemon線程的路徑;
步驟9.3.3、若LP為空,則s不是泄露的;否則,s則是泄露的;
步驟9.4、返回Ssrv,即獲得所有泄露的Service實例。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京大學,未經南京大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710790636.4/1.html,轉載請聲明來源鉆瓜專利網。





