国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于黑馬手機衛士的學習總結

2019-11-09 13:52:43
字體:
來源:轉載
供稿:網友

經過一個多月的不懈努力,終于完成了這個手機衛士的項目。時間都是擠出來的,不容易啊奮斗。現在稍稍的總結一下大笑,分享給大家http://pan.baidu.com/s/1jIhtrIu

(一)splash界面1,網絡訪問數據      URL url= new URL(“地址”);      HttpUtils 異步訪問服務器,回調結果在主線中執行

case LOADMAIN: // 加載主界面case ERROR://有異常

case SHOWUPDATEDIALOG:// 顯示更新版本的對話框2, 數據拷貝      把assets目錄的數據拷貝到/data/data/包名/files目錄  子線程拷貝 

//拷貝數據庫copyDB("address.db");3,動畫效果    AlphaAnimation  漸變動畫    AnimationSet  動畫集     RotateAnimation 旋轉動畫(設置錨點)    ScaleAnimation  比例動畫(設置錨點)    TranslateAnimation 位置動畫4,獲取版本號版本名           PackageManager pm = getPackageManager();    PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);       // 版本號versionCode = packageInfo.versionCode;// 版本名versionName = packageInfo.versionName;5,異常處理                     針對不同的異常做不同的處理,如404,4001,4002,4003等

6,安裝apk        Intent intent = new Intent("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");String type = "application/vnd.android.package-archive";Uri data = Uri.fromFile(new File("/mnt/sdcard/xx.apk"));intent.setDataAndType(data, type);startActivityForResult(intent, 0);7,解析json數據     JSONObject           簡單的json數據     Gson(未在該項目中)           復雜json數據8,代碼規范     盡量方法功能單一,注意共有功能的抽取    如:          initView();          initData();          initEvent();(二)主界面1,GridView       和ListView雙胞胎,多了指定列的選項adapter = new MyAdapter();gv_menus.setAdapter(adapter);// 設置gridview適配器數據2, 事件和適配器和ListView的處理方式完全一樣3,自定義對話框     AlertDailog.Builder ab;     ab.setView(自定義View);          自定義View 注意對話框的關閉處理 ab.create().dismiss();4, SpTool用法5, md5加密        1,文件             病毒的判斷        2,字符串             加密處理,不可逆                  加密3次以上 基本上解不出來,銀行支付寶密碼都采用多次加密

(三)手機防盜1,功能抽取(設置向導)        動畫效果        界面跳轉        事件處理2,檢查服務是否運行     通過ActivityManager獲取運行的服務,判斷服務是否存在3, 彈出窗體      彈出要想播放動畫,要設置背景資源      顯示的位置: pw.showAtLocation(rl_root, Gravity.LEFT | Gravity.TOP,width / 4, height / 4);     和自定義對話框的區別: 彈出窗體可以設置任意的位置,對話框只能在屏幕中間顯示4, 自定義菜單      監聽menu鍵的事件        keyCode == KeyEvent.KEYCODE_MENU5,sim卡變更報警       1,監聽開機啟動的廣播            android.intent.action.BOOT_COMPLETED       2,獲取sim信息              TelephoneManager 獲取sim卡       3, 原來的sim卡信息保存sp中,進行判斷6,gps     wifi 網絡ip 3g/4g 基站  gps 衛星     LocationManager處理定位,設置定位監聽     放到服務中去監聽7,設備管理器用法      一鍵鎖屏            激活設備管理員,鎖屏,遠程清除數據等       獲取設備管理       DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);       dpm.resetPassWord("123", 0);//一鍵鎖屏   dpm.lockNow();        dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);8,報警音樂       音樂播放器              為了防止重復播放           mp.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {//音樂播放完畢,觸發此方法isPlay = false;}});;              (四)黑名單數據1,自定黑名單數據庫         繼承SQLiteOpenHelper類2,分頁       1,設置顯示數據的個數       2,取所有數據 計算出多少頁       3, 取出每頁的數據              select * from blacktb  order by _id desc limit 數據個數 offset 起始位置; select * from blacktb limit 起始位置 , 結束位置;3,sql語句優化       只是判斷是否有數據,select 常量 from 表名       結構設計:             三大范式4, 界面顯示黑名數據        耗時的處理           子線程訪問數據         new Thread(){                    public void run(){發送不同的狀態                        //數據更新界面                        adapter.notifyDataSetChange();                   }           }.start();                   handler = new Handler(){            public void handleMessage(Message msg){                //處理不同狀態            }         }5, adapter的用法    getCount();          界面調用該方法,來確定多少個數據顯示    getView();           最重要                view緩存的復用                     注意緩存view的類型           緩存:                解決頻繁調用findViewById    getItem();             獲取數據,通過調用listview.getItemAtPosition             調用該方法來獲取    getItemId();             不用    注意: 界面顯示的位置 ,同過這些位置取數據顯示,界面不顯示的位置,不取數據6,啟動app      // 通過包名獲取意圖Intent launchIntentForPackage = pm.getLaunchIntentForPackage(packName);      注意沒有界面的app處理7,分享app短信        分享微博8,刪除app     用戶app              Intent intent = new Intent("android.intent.action.DELETE");intent.addCategory("android.intent.category.DEFAULT");intent.setData(Uri.parse("package:" + clickBean.getPackName()));startActivity(intent);// 刪除用戶apk的Activity     系統app               //直接可以使用命令刪除apkRootTools.sendShell("mount -o remount rw /system", 8000);//設置命令的超時時間為8秒System.out.PRintln("安裝路徑:" + clickBean.getApkPath());RootTools.sendShell("rm -r " + clickBean.getApkPath(), 8000);RootTools.sendShell("mount -o remount r /system", 8000);(五)進程管理1,獲取進程信息       ActivityManager 來獲取運行中的進程List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();2,獲取內存     總內存:讀取文件來獲取總內存大小 /proc/meminfo     可用內存:          MemoryInfo outInfo = new MemoryInfo();// MemoryInfo 存放內存的信息am.getMemoryInfo(outInfo);// 把kb 轉換成bytesize = outInfo.availMem;3,迭代器操作數據     容器不能增刪修改           list對象增刪改中標記           if (ourList.modCount != expectedModCount) {                throw new ConcurrentModificationException();            }4,清理進程      am.killBackgroundProcesses(bean.getPackName());5,listview過濾顯示數據     只需要修改getCount方法          @Overridepublic int getCount() {setTileMessage();if (!SpTools.getBoolean(getApplicationContext(), MyConstants.SHOWSYSTEM, false)) {//不顯示系統進程return userTasks.size() + 1;}return sysTasks.size() + 1 + userTasks.size() + 1;}(六)流量統計  真機: 流量信息的位置        /proc/uid_stat/id名/tcp_snd 發送流量        /proc/uid_stat/id名/tcp_rcv 接收流量  流量類型        //流量信息的管理類cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);(七)殺毒1,病毒數據庫的創建    拷貝金山的病毒數據         病毒判斷主要靠病毒文件的MD5值 或 sha1    2,病毒庫更新       讀取版本號判斷         12  50 從數據庫中動態取沒有的病毒數據3,查殺病毒     掃描系統中所有的文件 判斷MD5值,刪除文件(申請root權限)(八)緩存清理1,獲取緩存      反射和aidl來獲取緩存      參考setting的源碼,找到獲取緩存的代碼          ApplicationState.java  787行2, 清理緩存     1,單個app的緩存              系統app才可以有權限是清除                           打開設置中心     2,清除所有緩存           pm.freeDataAndNotify      3,緩存回調信息             在子線程中執行(九)高級工具 1,手機歸屬查詢       手機歸屬地數據庫       抖動(ApiDemo)       震動(真機)       監聽文本的變化2, 短信的備份和還原       json xml       界面的顯示             接口完成界面的回調顯示3, 程序鎖1,數據     fragment來顯示數據     程序鎖數據庫     數據緩存     數據一致             內容觀察者               1,注冊內容觀察者                 getContentResolver().registerContentObserver(LockedTable.uri, true, observer);    observer: 實現ContentObserver類的下面方法              @Overridepublic void onChange(boolean selfChange) {new Thread(){public void run() {LockedDao dao = new LockedDao(getApplicationContext());//讀取dao層讀取數據List<String> allLockedDatas = dao.getAllLockedDatas();//如果是實例變量  allLockedDatas.clear() .addAll();lockedFragment.setAllLockedPacks(allLockedDatas);unlockedFragment.setAllLockedPacks(allLockedDatas);};}.start();super.onChange(selfChange);}    uri: content://uricontent/xxtb/xxlie            2, 發送內容觀察者通知(自定義)                  // 發送內容觀察者的通知context.getContentResolver().notifyChange(LockedTable.uri, null);      注意:               uri要一致      動畫效果:位移動畫              2,看門狗服務        看門狗的監控任務棧              List<RunningTaskInfo> runningTasks = am.getRunningTasks(1);// 獲取最新的任務棧RunningTaskInfo runningTaskInfo = runningTasks.get(0);// 最新打開的任務棧// 任務棧中獲取頂部activityString packName = runningTaskInfo.topActivity.getPackageName();       判斷是否攔截             如果是攔截                    判斷是否是熟人                           廣播來接受熟人的信息                    不是熟人                          輸入密碼的界面                                   如果輸入的是正確的密碼,發送熟人廣播(十)設置中心     黑名單攔截服務             電話攔截                    如果是黑名單電話,掛斷電話和刪除電話日志                    掛斷電話:反射和aidl                    刪除電話日志:注冊內容觀察者             短信攔截                    終止短信的廣播傳遞     來電歸屬地:                 自定義Toast來顯示歸屬地                      在WindowManager中 addView(土司的view)                      觸摸事件                      土司的類型                 歸屬的樣式:                             設置背景資源     是否更新:               在sp保存標記,在splash界面判斷該標記                                        


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仲巴县| 郧西县| 阜宁县| 阆中市| 林甸县| 浦江县| 射阳县| 湘潭县| 平谷区| 云浮市| 漾濞| 紫金县| 文安县| 漳平市| 武汉市| 资阳市| 义马市| 梧州市| 武威市| 卓尼县| 政和县| 嘉黎县| 庆安县| 甘德县| 文昌市| 淳化县| 阿鲁科尔沁旗| 青岛市| 皮山县| 黑龙江省| 麻阳| 承德市| 元氏县| 娱乐| 车险| 博白县| 云南省| 清丰县| 电白县| 富宁县| 南溪县|