標籤:
拷貝安卓源碼中的邏輯,可以考慮先建立一個小項目實現以下效果
1,病毒資料庫的自動更新(串連網路,然後擷取特徵碼儲存到資料庫?)
①工程師發現病毒apk,擷取到它的特徵碼發布到伺服器上
通過 MD5 或者ASH1擷取特徵碼
②用戶端殺毒軟體下載特徵碼(可能是 JSON串)到本地用戶端
(在開啟軟體的時候還是開啟查殺介面的時候?其實都不適合,應該開啟一個服務去定期更新資料庫,訪問病毒更新特徵碼地址)
定期更新,timer和timertask,一般一個小時更新一次(測試的時候寫短一點)
串連伺服器:Url對象,擷取連結HttpUrlConnection,設定逾時時間,請求方式,
擷取響應碼,判斷結果,最後轉換輸入流為字串.轉換成json對象
③本地用戶端解析特徵碼,然後儲存至資料庫,最後查殺病毒.
解析伺服器的病毒庫版本,擷取本地病毒庫的版本(對應的表).
如果不一致,就添加新的病毒條目到本地,並且更新版本.
額外:①添加條目的時候記得查看DDL資料模式定義,語言查看錶結構
②如果要更新資料庫條目和版本,記得開啟資料庫事務,保持一致性.
db.beginTransaction();//開始資料庫事務
db.beginTransactionSuccessful();//事務執行成功
db.endTransaction()//結束事務,寫在 finally裡.
③要記得開啟服務,放在splash裡開啟即可.(要判斷病毒資料庫是否存在)
額外:檢測惡意APP還有:檔案檢驗,行為分析等,很多查殺病毒方式.
2,橫豎屏切換的生命週期
2.1橫豎屏切換的時候介面重新建立activity,解決方式:
①固定橫豎屏.
②不讓activity重建.
2.2 自訂控制項的顯示樣式:
尋找源碼>>styles樣式檔案,找到想要查看的顯示樣式
根據不同的樣式節點,查看對應的xml樣式檔案.
進度條實際上有三層,一個背景,兩個進度(大進度,小進度,參考播放器進度)
//不想寫就拷貝源碼中的檔案,修改參數即可,把進度背景改成想顯示的圖片(要替換的話,三個背景圖片最好都替換掉)即可.
要注意對應的屬性名稱,不要搞錯了,不然不生效。
參考背景設定xml資源
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/progress_bg">
</item>
<itemandroid:id="@android:id/secondaryProgress"android:drawable="@drawable/security_progress"> </item>
<itemandroid:id="@android:id/progress" android:drawable="@drawable/security_progress">
</item>
</layer-list>
3, 緩衝清理功能
3.1 ui
①緩衝清理,SD卡清理,痕迹清理(暫時不用)三個選項卡,使用Fragment片段介面.
②主介面ui參考:
記得給這讓兩個小選項卡的背景變換(表示一個被選中,一個沒選中.參考home介面的條目小背景,一個透明的邊框線)
點擊一個選項卡之後,還要記得切換它們的表徵圖資源(醒目的和不醒目的圖片,文本顏色也可以修改掉,更好看一些,嗎?)記得改布局的預設顏色,不然第一次開啟顏色還是黑色.
③Fragment包,存放所有片段檔案(考慮向下相容,使用v4包)
建立類繼承Fragment,重寫onCreate,返回的View 代表這個片段配置樣式.
配置樣式:暫無,寫一個TextView的文本標記一下即可.
擷取上下文:getActivity();
在Activity中
點擊事件:建立Fragment 繼承類對象.
擷取支援FragementManager.beginxXX再擷取事務.
然後ft.replace(id,對象);最後ft.commit();
額外:一開始指定一個幀布局,在開啟功能頁面的時候就能顯示它.
3.2 清理緩衝的功能
什麼是緩衝:臨時檔案的的儲存,當系統資源不足的時候 會回收緩衝空間
①在緩衝的Fragment裡,掃描所有應用程式的緩衝目錄,如何??
尋找源碼(看看安卓自己是怎麼做的):
在設定介面的應用程式可以看到每個應用程式的緩衝內容,通過這一點去找到系統源碼的setting源碼,
如果直接把setting源碼匯入工程,會報錯,因為它是在架構下進行編譯的,依賴架構裡的api,而工程裡缺少很多系統底層開發的api,所以會報錯。
查詢源碼:尋找特定字元,根據特定字元去尋找源碼,ctrl+H搜尋
一致追尋到擷取緩衝資訊的代碼.packageStats api
②代碼擷取快取資料
PackagerManage pm
pm.getPackageSizeInfo();擷取包大小資訊,但是這個方法被隱藏了.
通過反射擷取到這個方法//擷取位元組碼對象,擷取到所有方法
//其它自己探索
額外:注意許可權問題
3.3 Fragment ui布局:(可以用ListView 也可以直接用LinearLayout填充空白資料)
②在Fragment 的onStart()方法編寫擷取所有應用程式的緩衝
//擷取所有包資訊,根據包名,利用反射擷取緩衝資訊.
③記得更新介面ui,掃描進度,掃描的文本,
判斷是否存在緩衝,存在緩衝就把有緩衝的訊息(有緩衝的AppLiaction和緩衝大小,可以考慮建立一個對象去封裝這些資訊)發給主線程
要讓條目點擊發生狀態改變,設定背景資源狀態選取器
顯示緩衝的ui最佳化:參考ui.
4清除某一個程式的緩衝資訊
4.1
查看系統源碼setting中清楚緩衝的按鈕點擊事件中的代碼邏輯
pm.deleteAppliCationCacheFile()//也是被隱藏的,通過反射去調用它
額外:注意許可權異常。但是這個許可權只能給系統app使用,所以這個邏輯無法實現
解決方式:曲線救國,使用者如果點擊了單個應用的清除緩衝,就跳過setting的詳細頁面,讓使用者自己去實現這個清除功能。
4.2 BUG 如果到別的頁面再返回清理緩衝介面,舊資料和新資料都顯示在頁面上。
在onStart()//介面可見的時候,添加一條邏輯,每次可見就清空一次布局中的子控制項
ll.reamoveAllViews();
5,清除全部緩衝:安卓系統的漏洞:讓系統發送廣播,硬碟空間不夠用,系統回收緩衝。
實現方法:發送一個訊息給作業系統,我要申請一個非常大的空間。就會回收緩衝了。
實現步驟①:增加一個新按鈕
②找到這個控制項,點擊的時候申請一個非常大的空間
PackageManager>>freeStorageAndNotify(申請空間,觀察者介面);
//申請一個可用空間,觀察者返回的是最大可申請空間(能返回多少返回多少)
這是一個隱藏的api
申請的空間,integer.MaxValue//2G,2的31次方 為2G
許可權:CLEAR_APP_CACHE//安卓的漏洞,Google沒有檢查這個許可權的使用app(system).
額外:清楚完緩衝之後,清楚掉下面所有的子控制項,從而更新介面顯示。
6.SD卡清理:
掃描SD卡中的檔案(遞迴遍曆SD卡檔案夾,篩選常見快取檔案拓展名.tmp.temp)
把遍曆出來的快取檔案顯示在介面上,使用者可以手動清空所有檔案(刪除掉).
額外:市面上的清理SD卡還會根據一個資料庫(儲存市面上常見APP的緩衝目錄)來判斷這個快取檔案屬於哪一個APP來提示使用者,提高使用者體驗
手機衛士11_ 自訂控制項_緩衝清理_病毒庫更新