Android gradle插件打印時間戳的方法詳解
Android中時間戳的詳細解釋:
(1).定義:
時間戳就是根據(jù)當前系統(tǒng)時間生成的一組隨機數(shù)字。
(2).作用:
作為對數(shù)據(jù)唯一性的一種判斷依據(jù)。避免了重復修改數(shù)據(jù)所帶來的錯誤!
(3).應用:
(1).在銀行account表中建立時間戳字段timestamp,設定為文本類型varchar。
(2).當銀行A讀取account表中的存款字段時,同時也讀取時間戳字段,比如123456。
(3).當銀行A修改完存款數(shù)值后,進行存盤操作時,將先前讀取的時間戳123456與當時表中的時間戳進行一次對比,如果一致,那么允許存盤,然后生成一個新的時間戳比如456789替換表中原有的時間戳123456。
若沒有使用時間戳:
銀行A和銀行B同時打開你的賬戶,看到的金額都是1000元。與此同時,兩個銀行讀取的時間戳都是12345.
若使用時間戳:
當銀行A打開賬戶的時候,把1000元改成1500元,存盤,系統(tǒng)將對比先前的時間戳與存盤時表中的時間戳是否一致,現(xiàn)在一致,允許存盤。存盤時,將生成了一個新的時間戳45678。B銀行也將1000元修改成了1500元,存盤,系統(tǒng)對比先前的時間戳123456是否與存盤時表中的時間戳一致,發(fā)現(xiàn)先前的時間戳123456已經與現(xiàn)在的時間戳456789相異,系統(tǒng)拒絕存盤,要求刷新數(shù)據(jù),那么數(shù)據(jù)刷新之后1000元已經因為之前A銀行存入了500元而成為了1500元,那么B銀行就會在1500元的基礎上改為2000元,再次存盤,系統(tǒng)允許.
簡而言之:就是在操作的時候,通過對比修改之前的數(shù)據(jù)表中的時間戳與修改之后的數(shù)據(jù)表中的時間戳是否一致。
若一致,允許存儲,同時生成一個新的時間戳。
若不一致,就要求刷新數(shù)據(jù),在新的數(shù)據(jù)上進行修改。再次存儲。
引言
在性能調優(yōu)時經常要打印函數(shù)執(zhí)行時間、參數(shù)值等, 為了調試加了很多代碼,調完后還要刪掉, 這個事很繁瑣。 我們可以用Android Profiler或methodtracing打印函數(shù)執(zhí)行時間,但日志太多了且缺少參數(shù)值。所以JakeWharton寫了個hugo庫, 是用AspectJ實現(xiàn)的,基于AOP思想。 我看了hugo源碼,總共四個文件左右,代碼量很少。
我想做個同功能的插件,順便學習一下gradle插件制作方法和字節(jié)碼注入。
用法很簡單,參考https://github.com/brycegao/TimePlugin/tree/master/demo
項目build.gradle文件里添加classpath和maven。
buildscript { repositories { google() jcenter() maven { url "https://dl.bintray.com/brycegmail/maven" } } dependencies { classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.brycegao.timeplugin:timeplugin:1.0.4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url "https://dl.bintray.com/brycegmail/maven" } } } task clean(type: Delete) { delete rootProject.buildDir }
在app模塊的build.gradle文件添加
apply plugin: 'timeplugin' ... implementation 'com.brycegao.tpannotation:tpannotation:1.0.2'
在想打印日志的類或方法前添加注解@DebugLogger即可,用法參照hugo實現(xiàn)的。
@DebugLogger public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showMsg(1, "this is test"); findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } private void showMsg(int i, String msg) { try { Thread.sleep(100); //僅僅為了測試 } catch (Exception ex) { ex.printStackTrace(); } } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); } }
運行程序:
原理:
注解的作用表示要修改哪個函數(shù), gradle插件的作用是遍歷.class, Javassist是字節(jié)碼注入工具。
在編譯期間進行字節(jié)碼注入, 打開./app/build/intermediates/classes/debug/transforms/TPTransform/1目錄可以看到修改后的字節(jié)碼。
優(yōu)點:在編譯期間注入業(yè)務邏輯代碼,比在源碼里加log更方便,不用feature時只要配置gradle 插件不參與編譯即可。
展望:在編譯期間加日志只是一個點, 還可以實現(xiàn)很多其它業(yè)務邏輯。
完整代碼:https://github.com/brycegao/TimePlugin 求star
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 為Android Studio編寫自定義Gradle插件的教程
- 詳解如何使用Android Studio開發(fā)Gradle插件
- 詳解Android Gradle插件3.0挖坑日記
- Android Studio Gradle插件版本與Gradle版本之間的對應關系
- AndroidStudio升級4.1坑(無法啟動、插件plugin不好用、代碼不高亮)
- AndroidStudio升級4.1后啟動失敗Plugin問題解決
- 解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible的問題
- Android自定義Gradle插件的詳細過程
- Android?Studio?中Gradle配置sonarqube插件(推薦)
- Android?Gradle?插件自定義Plugin實現(xiàn)注意事項
相關文章
Android多功能時鐘開發(fā)案例(實戰(zhàn)篇)
這篇文章主要為大家詳細介紹了Android多功能時鐘開發(fā)案例,開發(fā)了時鐘、鬧鐘、計時器和秒表,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05Android RecyclerView使用GridLayoutManager間距設置的方法
本篇文章主要介紹了Android RecyclerView使用GridLayoutManager間距設置的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Flutter學習之創(chuàng)建一個內嵌的navigation詳解
我們在flutter中可以使用Navigator.push或者Navigator.pushNamed方法來向Navigator中添加不同的頁面,從而達到頁面調整的目的。本文就來聊聊如何創(chuàng)建一個內嵌的navigation吧2023-03-03Android實現(xiàn)語音數(shù)據(jù)實時采集、播放
這篇文章主要介紹了android實現(xiàn)語音數(shù)據(jù)實時采集、播放的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12android listview 水平滾動和垂直滾動的小例子
android listview 水平滾動和垂直滾動的小例子,需要的朋友可以參考一下2013-05-05Android中FoldingLayout折疊布局的用法及實戰(zhàn)全攻略
這篇文章主要介紹了Android中FoldingLayout折疊布局的用法及實例,通過FoldingLayout我們可以制作出炫酷的菜單折疊效果,文中的例子講解得非常詳細,需要的朋友可以參考下2016-02-02設置界面開發(fā)Preference Library數(shù)據(jù)重建機制詳解
這篇文章主要為大家介紹了設置界面開發(fā)利器Preference Library數(shù)據(jù)重建機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10解決android studio android monitor打不開的問題
下面小編就為大家分享一篇解決android studio android monitor打不開的問題,具有很的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01