DrySister看妹子應用(第一版)——5.程式碼回顧,調整與日誌類編寫
DrySister看妹子應用(第一版)——5.程式碼回顧,調整與日誌類編寫
標籤: DrySister
1.一些BB
說來慚愧,DrySister的上一篇距今已經有一年多了,期間有不少小夥伴
都曾私信過我說寫得很好,穩什麼時候更,我基本都回復說太監了…
具體原因各種各樣吧,最近一段時間比較閒,就想把第一版的完結了吧。
之前剛開始寫的時候是AS 2.1.2,現在都AS 3.0.1了,本節的內容
依次是:
- Step 1:溫習一波之前幾節涉及到的東西
- Step 2:程式碼在AS 3.0.1上跑要做一些調整
- Step 3:編寫一個日誌類
下節我們來說說簽名,混淆,以及釋出到應用市場~
廢話不多說,開始本節內容!
2.程式碼回顧
- 第一節:專案搭建與簡單實現
- 1.Git相關的操作
- 2.簡單的圖片載入類(獲取網路流->轉換成圖片->Handler更新UI)
- 第二節:解析後臺資料
- 1.使用Android自帶摳腳Json解析器解析後臺返回的Json資料(Json字串 -> List<Bean>)
- 2.使用AsyncTask來做非同步網路請求
- 第三節:圖片載入優化(寫個圖片快取小框架)
- 1.圖片快取的基本套路
- 2.使用取樣壓縮法壓縮Bitmap,避免OOM
- 3.執行緒池管理多個圖片載入執行緒
- 4.Handler更新UI
- 5.String字串(這裡是URL)轉MD5
- 6.記憶體快取類LruCache的使用
- 7.磁碟快取類DiskLruCache的使用
- 8.整個圖片非同步載入快取的邏輯設計
- 1.圖片快取的基本套路
- 第四節:新增資料快取(加入SQLite)
- 1.網路狀態的判斷
- 2.自定義SQLiteOpenHelper建立資料庫
- 3.資料庫相關操作:增刪改查,事務,分頁等
以上就是前面四節的內容,對於Android基礎入門中重要的
知識點都進行了運用,如果都掌握了的話,算是勉強Android入門了,
後面的路還長著呢!
3.程式碼調整
AS切換到3.0以後,下述檔案的程式碼需要進行改動,老規矩,切換分支命令走一波:
git checkout -b fix_code_as3.0.1,然後開始程式碼修改:
專案層級的build.gradle:
APP層級的build.gradle:
gradle-wrapper.properties:
還有個地方要小改:SisterApi.java,把福利改成:%e7%a6%8f%e5%88%a9
這涉及到了中文轉碼問題,而HttpUrlConnection無法開啟含有中文的連結,需要
對中文部分呼叫URLEncoder.encode(中文部分,”utf-8”);進行轉碼,記得只是
中文部分,不是整個url!!!轉碼還需要捕獲異常,這裡因為只有一個地方要
轉碼,我就直接用網頁版的轉碼工具來轉碼了:http://tool.chinaz.com/tools/urlencode.aspx
轉換後的結果:
另外還有一些小改,buildToolsVersion 26以上,findViewById是不用強轉的,
點進去方法看就知道了,用了泛型,所以把findViewById都去掉:
最後覺得執行再我的魅藍E2上效果有點偏差,小調了一下頁面佈局,讓圖片寬度滿屏
然後高度自適應,這裡用到的屬性 android:adjustViewBounds = “true”,就是
寬高按比例縮放;還有把上一步下一步的文字放到strings.xml檔案中,小調邊距:
最後再來看我們的專案執行結果:(嘖嘖,好看的妹子就是養眼):
然後把這個分支合併到develop分支上,這裡我們不用之前merge那種合併套路
而是用rebase來合併,具體過程如下:
git add .
git commit -m "fix code in as3.0"
git checkout develop # 切換到develop分支
git rebase fix_code_as3.0.1 # 合併分支
git push origin develop # 推送develop到遠端分支
git branch -d fix_code_as3.0.1 # 刪除合併後的本地分支
關於Git還不懂的可以去另一篇文章學習,這裡就不多解釋了:小豬的Git使用總結
4.編寫日誌工具類與崩潰日誌採集類
Log列印日誌相信每一位開發者都不會陌生吧,平時除錯必不可少,
當應用打包給測試測試時。測試反饋應用crash的時候,我們第一件
想到的事就是讓對方提供日誌。說到這個打Log,很多童鞋喜歡隨手
一個Log.e(xxx,xxx),什麼日誌都是Error級別,原因基本是:
紅色比較醒目,哈哈!然後直接把變數的值列印處理啊,或在某個
方法里加上,驗證方法是否執行了等,正式釋出的收記得刪還好,
不記得刪的話簡直是作死。反正之前給上家公司的大佬噴了一頓,
至今記憶猶新!Log的管理非常重要,我們要寫的兩個工具類如下:
- 1.debug的時候日誌正常列印,release的時候不列印
- 2.奔潰日誌採集,自己測試或者測試測試倒沒什麼,崩潰了直接把
手機接你電腦上看看logcat就一清二楚了,但是如果應用裝到了使用者
手機裡,應用崩潰停止執行了,使用者可不會把日誌發給你,多次崩潰
還可能導致使用者解除安裝你的APP,所以我們需要在APP崩潰的時候把
日誌儲存起來,當使用者連線wifi或再次開啟應用時,把這個日誌上傳
到我們的伺服器,我們這裡只是寫來玩玩的,所以只做本地崩潰日誌採集,
一般都是通過整合第三方的統計工具來進行日誌採集的,比如友盟,Bugly等。
好的,需求就上面的兩點,接著準備開始編寫程式碼,不過在寫程式碼之前
科普關於Log的兩點,可能大部分的童鞋都已經知道了,知道的可以直接跳過:
1) 快速列印Log
開啟設定,依次點選:Live Templates -> AndroidLog把日誌列印的都勾上
你還可以自己在下面的Template text裡編寫模板~
接著隨便程式碼裡鍵入上面的log…一個enter,Log語句就出來了,
TAG直接就是你當前的方法名~
2.關於Log的使用科普
1) 快速列印Log列印命令
開啟Settings,依次點選:Live Templates -> AndroidLog把日誌列印的都勾上
你也可以自己在下面的Template text裡編寫模板~
接著隨便程式碼裡鍵入上面的log…一個enter,Log語句就出來了~
如果你在方法外,鍵入logt,可以直接生成一個對應類名的TAG:
2) Log等級的科普
以前組長開小會的時候曾說過我們除錯時直接Log.e的壞習慣,
不同的Log級別應該列印不同的資訊:
- Log.v:Verbose(冗長)
開發除錯過程中一些詳細資訊,不該編譯進產品,只在開發階段使用- Log.d:Debug(除錯)
用於除錯的資訊,編譯進產品,執行時關閉。下面這三種等級進製作為普通除錯資訊使用,這些等級的Log是應用
出現問題時候的重要分析線索,如果隨意使用,會給開發人員分析Bug
帶來不必要的困擾。
- Log.i:Info(資訊)
例如一些執行時的狀態資訊,這些狀態資訊在出現問題的時候能提供幫助。- Log.w:Warning(警告)
警告應用出現了異常,但不一定會馬上出現錯誤,需要留意- Log.e:Error(錯誤)
應用出現了錯誤,最需要關注解決的!
3) 編寫日誌工具類
老規矩,先開闢分支:bug_log_catch
這個就非常簡單了,除錯時輸出,正式版時不輸出,利用BuildConfig.Debug
進行判斷即可,程式碼如下:
4) 編寫崩潰日誌採集類
崩潰日誌採集類依賴於Application與Thread.UncaughtExceptionHandler實現~
當因為程式因為未捕獲的異常即將終止退出時,會使用Thread.UncaughtExceptionHandler
查詢UncaughtExceptionHandler的執行緒,呼叫uncaughtException方法,將執行緒
與異常作為引數傳遞。如果執行緒沒有明確設定UncaughtExceptionHandler,則將
其ThreadGroup作為其UncaughtExceptionHandler,然後丟給預設的未捕獲異常
處理程式處理。所以我們只需要實現UncaughtExceptionHandler介面,重寫
uncaughtException方法,來實現我們的自定義處理。我們先來捋一捋邏輯清單:
- 1.建一個資料夾專門放日誌檔案:需要判斷是儲存卡是否可用,然後判斷檔案
夾是否存在,不存在則新建資料夾; - 2.需要一個把字串寫入檔案的方法
- 3.崩潰日誌的內容組成:當前的時間,應用版本,裝置資訊,奔潰日誌
- 4.獲取系統預設的UncaughtException處理器,然後判斷是否為null,不為空
設定為自定義的UncaughtException,這裡我們用單例 - 5.最後是應用的重啟,設定1s後重新啟動應用;
大概邏輯就是上面這些,我們一步步講,首先是1,2步:
接著是奔潰日誌,由幾部分組成:先是當前時間
接著是應用版本以及裝置資訊,這裡用一個HashMap來存:
在接著是異常資訊,這個就簡單啦,直接傳異常物件,調printStackTrace即可
最後合到一起就是:
寫入檔案的也解決了,然後是自定義UncaughtExceptionHandler單例以及預設
UncaughtExceptionHandler處理器的獲取,設定為自定義UncaughtExceptionHandler,
還需重寫UncaughtException方法
接著我們把自己處理異常的一整套都寫到一個方法裡,當異常發生了,彈出
一個Toast提示使用者應用要重啟,還有呼叫寫入日誌的方法:
然後重寫的UncaughtException方法做下判斷,是否通過自定義處理了異常,
以及預設的UncaughtExceptionHandler的是否為空,即:異常處理了沒?
沒處理,丟給自定義的UncaughtExceptionHandler,如果處理了,重啟應用。
最後加上重啟應用的相關程式碼,大功告成:
到此我們的崩潰日誌採集工具類就編寫完畢了,要啟用他的
話需要在DrySisterApp.java中的onCreate()方法中加上:
弄完想測試下是否生效的話很簡單,手動引發崩潰就好了
比如我在下一步的按鈕裡做除數為0的操作:
應用執行後點選下一步,直接崩潰,開啟內建儲存根目錄看下
有沒有Crash的資料夾,開啟看到我們日誌檔案的話,說明成功:
到此完成,把分支合併到develop上,然後推送到遠端倉庫上:
git add .
git commit -m "add LogUtils and CrashHandler"
git checkout develop # 切換到develop分支
git rebase bug_log_catch # 合併分支
git push origin develop # 推送develop到遠端分支
git branch -d bug_log_catch # 刪除合併後的本地分支
5.小結
本節先回顧了下之前寫的程式碼,然後因為切換到AS 3.0上的原因
小調整了一下程式碼,最後還編寫了日誌工具類以及崩潰日誌採集
工具類,麻雀雖小五臟俱全,儘管就是一個小小的圖片顯示程式,
但是也算囊括了大部分的入門知識,下一節就是第一版的完結篇
了,簽名打包,混淆,以及釋出到酷安市場了!敬請期待~
程式碼下載:
https://github.com/coder-pig/DrySister/tree/develop
歡迎follow,star,覺得有什麼想加進來的可以提下issues!
相關文章
- DrySister看妹子應用(第一版)——6.圖示製作,混淆,簽名打包,APK瘦身,應用釋出APK
- DrySister看妹子應用(第二版)——1.新版Material Design主介面搭建Material Design
- dg庫日誌應用慢引數調整
- 5. SQL回顧SQL
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架
- oracle線上調整重做日誌Oracle
- Oracle重做日誌調整技巧Oracle
- 應用程式日誌Sample
- Oracle調整redo log日誌大小Oracle
- 5.編寫recipe
- 程式碼大全回顧篇...
- Go基礎學習記錄 – 編寫Web應用程式 – 重新調整專案目錄結構(一)GoWeb
- 管理oracle日誌之調整檢查點Oracle
- oracle效能調優:管理oracle日誌之調整線上日誌檔案Oracle
- 調整系統用SYSTEM回滾段
- 2020 看雪SDC議題回顧 | 生物探針技術研究與應用
- ELK日誌系統之通用應用程式日誌接入方案
- Layui+larave-log-view日誌頁面調整UIView
- 5. SQL 編寫規範SQL
- 用PHP編寫Android應用程式PHPAndroid
- 檢視mysql日誌及日誌編碼問題MySql
- (轉)用NSDateFormatter調整時間格式的程式碼ORM
- VSCode回車換行後自動調整程式碼格式VSCode
- 用Java日誌來寫詩Java
- 【J+】產品創新之路與大資料下的日誌分析(精彩回顧)大資料
- 【Logback日誌級別】動態調整Logback的日誌級別
- DBeaver如何調整sql檔案編碼SQL
- 編寫友好的命令列應用程式命令列
- 編寫iOS應用程式有何不同iOS
- 調整mac應用圖示排列Mac
- .NET應用架構設計—表模組模式與事務指令碼模式的程式碼編寫應用架構模式指令碼
- log4j日誌列印級別動態調整
- 資料庫引擎調整顧問資料庫
- [譯] 編寫整潔 CSS 程式碼的黃金法則CSS
- 【KubeMeet 上海站回顧】 探索雲原生應用管理與交付新解法
- 一看就懂,Python 日誌模組詳解及應用Python
- Storm的wordcount程式碼編寫與分析ORM
- 如何使用 Laravel Collections 類編寫神級程式碼Laravel