手機衛士12_軟體鎖,應用程式相關

來源:互聯網
上載者:User

標籤:

1,軟體鎖(功能描述:當軟體處於以加鎖的列表中時,開啟這個軟體會跳轉到密碼輸入介面,輸入正確會跳轉到軟體介面,否則密碼錯誤)

①ui參考

不使用fragment,採用布局疊加隱藏,點擊一個文本,就顯示一個介面(列表ListView),另一個布局介面隱藏起來(frameLayout幀布局實現).

②程式未加鎖介面的展現

找到所有關心的控制項,預設把所有的應用程式未加鎖介面列表中.

參考條目ui

 

額外:加鎖的小表徵圖帶有狀態選取器,點擊變換圖片

 

 

橫線可以考慮加個寬度為1的imageView;

③點擊條目添加到以加鎖列表中,並在當前列表進行移除.

由於以加鎖是列表條目是需要長期儲存的,所以建立資料庫去記錄資料.

參考表名:lockinfo,_id,主鍵自增長,packname應用程式套件組合名,

然後建立dao類,操作這個表的增刪改查邏輯.

如果異常出現unix之類的 C代碼異常,就有可能是模擬器掛掉了.

點擊條目>>添加到資料庫>>以加鎖條目添加資料.

額外:擷取應用程式集合的時候,分流:以加鎖的應用程式集合,未加鎖的應用程式集合.(查表判斷)

④加鎖條目的顯示:也是一個ListView,注意右邊解鎖小表徵圖的不同.

條目點擊事件裡,如果點擊了加鎖,一個集合移除,另一個集合添加.

ui更新:把切換條目放到標題上

 

⑤條目的動畫效果,點擊之後向左移動(解鎖),點擊加鎖,向左移動.

//位移動畫.

點擊條目之後播放動畫,然而播放的動畫效果出現在下一個條目上.(適配器.notifyDataSetChanged和動畫的代碼先後順序不影響.)

因為動畫的播放不是一個阻塞式的代碼(並不按從上到下的代碼執行順序,而是開啟了一個計時器.)

所以要註冊動畫的監聽器setAnimationListener(new xxx){

onAnimationStart()//開始播放時

onAnimationRepeat()//重複播放

onAnimationEnd()//當動畫停止播放時

}

2,程式鎖看門狗的核心原理:

2.1觀察Log日誌,可以發現當使用者開啟應用的時候ActivityManager會列印一條日誌,開啟的應用.

所以只需要通過擷取ActivityManager的資料就可以監視系統啟動並執行狀態了.

看門狗需要長期駐紮在背景程式,所以需要建立一個服務,去擷取(不停的)資料

開一個子線程,死迴圈,或者計時器都可以達到不停擷取資料的效果.

am.getRunningTask(最大任務棧數1000)//擷取正在啟動並執行任務,返回一個正在啟動並執行任務棧集合.

一般安卓任務棧不會超過50,WIndows都不過100

這個api的特點:最近使用的在最前面,最後使用的在最後面.

RunningTaskInfo.topActivity.getPackageName();

2.2 所以只要不斷擷取啟動並執行任務棧中第一個任務,然後判斷它就能實現看門狗的效果.

值得注意的是,死迴圈需要用一個變數來控制它,方便進行關閉,不然子線程無法關閉.同時要給它每次擷取資料設定一個短暫的延遲,否則每秒上千次迴圈遍曆很容易消耗資源.

2.3 在設定中心加一個新的開關:開啟,開啟服務,關閉,關閉服務

記得判斷狀態,進行回顯狀態.

//許可權:GET_TASK 擷取任務棧狀態

 

3,代碼實現看門狗效果

3.1

①看門狗運行期間,擷取到第一個任務,然後查詢資料庫,判斷是否受保護,如果是,開啟一個密碼介面

服務開啟activiy,記得添加flag,intent.setFlag(Intent.FLAG_ACTIVIYT_NEW_TASK);

開啟介面的時候,把應用程式的包名傳遞過來intent.putExtra(packagename);在密碼介面顯示出來,方便使用者區分要開啟的應用是什麼.

②密碼介面參考ui:

 

③密碼輸入正確,finsh()掉當前頁面,密碼輸入錯誤,提示錯誤,輸入框抖動(參考api demo中的效果)

密碼輸入正確之後,應該告訴看門狗臨時停止檢測這個應用(發送廣播,綁定遠程服務都可以).

這裡用自訂廣播,如果密碼輸入正確,發送一條自訂廣播,攜帶包名(為了臨時停止保護)

在服務裡接收到這個廣播,把包名記錄下來,在判斷完是否需要保護,再判斷是否需要臨時停止檢測.

 

3.2 BUG修複:

①使用者點擊返回鍵,密碼介面消失後,可以看到一瞬間的介面,所以在密碼輸入介面點擊返回鍵,就讓使用者直接返回案頭.

重寫onBackPressd()//如果把這裡面的super()代碼刪掉,點擊返回就不會關閉介面了.

這裡需要讓使用者返回案頭.//查看上層應用,案頭的原始碼.

②使用者返回案頭再開啟密碼保護應用時,密碼保護介面還是上一次的應用.

解決方案:當介面不可見的時候關閉它.

③開啟應用可以看到一瞬間的介面:看門狗迴圈時間間隔太長,簡短即可.

 

3.3 如果開啟了手機衛士,最小化之後,開啟受保護的應用,輸入正確的密碼,來到的介面是手機衛士,而不是想要代開的應用.

原因:因為手機衛士的任務棧存在多個介面,當開啟受保護的應用時,彈出密碼輸入介面.手機衛士任務棧存在兩個介面,輸入正確,輸入密碼正確只是關閉了密碼輸入的介面,會返回手機衛士的上一個介面.而不是受保護的應用.

解決方案:Activity期末模式:單一執行個體singleInstance

開發的時候靈活的使用啟動模式,可以解決一些應用程式的使用者體驗BUG,提高程式執行效

 

3.4 應用程式的效率最佳化

①把一些引用提取到死迴圈的外面

②am.getRunningTasks(1);//只需要第一個任務棧中的任務就行了

③看門狗查詢資料庫的操作是比較消耗時間的,所以增加一個查詢所有的保護應用的集合,這樣每次查詢的時候,就不用查詢資料庫,直接查詢集合(在記憶體中,效率高)即可.

④輸入密碼介面的初始化操作放到死迴圈外面

 

3.5,最佳化之後引發的BUG

①擷取資料庫集合操作只執行了一次.如果在服務開啟期間,增加或刪除不起作用

解決:通過內容觀察者實現

Uri : content://xxxxxxx

在DAO中context.getContentResolver().notifyChange(uri,通知的觀察者(null,誰註冊誰觀察));

在服務類中,建立內容解析器.註冊內容內容觀察者(uri,true(首碼滿足即可),內容觀察者);

建立內容觀察者內部類,繼承ContentObserver,重寫onChange()方法,當資料發生變化時調用.

發生變化之後,重新擷取一次集合即可.

關鍵字:觀察者設計模式

 

4.程式鎖的電量最佳化

程式鎖在後台服務一直執行,耗電量高.

當使用者在操作手機的時候才進行看門狗行為,鎖屏的時候關閉迴圈,子線程就結束掉了,解鎖螢幕的時候開啟子線程.

//這兩個事件都會發出廣播,在看門狗的內部廣播接收者註冊的時候增加兩個action

接收到廣播的時候,過濾一下action.

 

 

 

 

 

手機衛士12_軟體鎖,應用程式相關

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.