亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android gradle插件打印時間戳的方法詳解

發布時間:2020-10-08 09:30:04 來源:腳本之家 閱讀:151 作者:brycegao 欄目:移動開發

Android中時間戳的詳細解釋:

(1).定義:

時間戳就是根據當前系統時間生成的一組隨機數字。

(2).作用:

作為對數據唯一性的一種判斷依據。避免了重復修改數據所帶來的錯誤!

(3).應用:

(1).在銀行account表中建立時間戳字段timestamp,設定為文本類型varchar。

(2).當銀行A讀取account表中的存款字段時,同時也讀取時間戳字段,比如123456。

(3).當銀行A修改完存款數值后,進行存盤操作時,將先前讀取的時間戳123456與當時表中的時間戳進行一次對比,如果一致,那么允許存盤,然后生成一個新的時間戳比如456789替換表中原有的時間戳123456。
若沒有使用時間戳:

銀行A和銀行B同時打開你的賬戶,看到的金額都是1000元。與此同時,兩個銀行讀取的時間戳都是12345.

若使用時間戳:

當銀行A打開賬戶的時候,把1000元改成1500元,存盤,系統將對比先前的時間戳與存盤時表中的時間戳是否一致,現在一致,允許存盤。存盤時,將生成了一個新的時間戳45678。B銀行也將1000元修改成了1500元,存盤,系統對比先前的時間戳123456是否與存盤時表中的時間戳一致,發現先前的時間戳123456已經與現在的時間戳456789相異,系統拒絕存盤,要求刷新數據,那么數據刷新之后1000元已經因為之前A銀行存入了500元而成為了1500元,那么B銀行就會在1500元的基礎上改為2000元,再次存盤,系統允許.

簡而言之:就是在操作的時候,通過對比修改之前的數據表中的時間戳與修改之后的數據表中的時間戳是否一致。

若一致,允許存儲,同時生成一個新的時間戳。

若不一致,就要求刷新數據,在新的數據上進行修改。再次存儲。

引言

在性能調優時經常要打印函數執行時間、參數值等, 為了調試加了很多代碼,調完后還要刪掉, 這個事很繁瑣。 我們可以用Android Profiler或methodtracing打印函數執行時間,但日志太多了且缺少參數值。所以JakeWharton寫了個hugo庫, 是用AspectJ實現的,基于AOP思想。 我看了hugo源碼,總共四個文件左右,代碼量很少。
我想做個同功能的插件,順便學習一下gradle插件制作方法和字節碼注入。

用法很簡單,參考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實現的。

@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);
}
}

運行程序:

Android gradle插件打印時間戳的方法詳解

原理:

注解的作用表示要修改哪個函數, gradle插件的作用是遍歷.class, Javassist是字節碼注入工具。
在編譯期間進行字節碼注入, 打開./app/build/intermediates/classes/debug/transforms/TPTransform/1目錄可以看到修改后的字節碼。

Android gradle插件打印時間戳的方法詳解

優點:在編譯期間注入業務邏輯代碼,比在源碼里加log更方便,不用feature時只要配置gradle 插件不參與編譯即可。

展望:在編譯期間加日志只是一個點, 還可以實現很多其它業務邏輯。

完整代碼:https://github.com/brycegao/TimePlugin 求star

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芒康县| 夏河县| 临清市| 利辛县| 讷河市| 孟津县| 白玉县| 嘉义县| 同德县| 深水埗区| 平阳县| 奉贤区| 蕲春县| 南召县| 恩平市| 巴林左旗| 孙吴县| 米泉市| 周至县| 湘乡市| 新沂市| 肃北| 涡阳县| 黑水县| 湘阴县| 南开区| 汤阴县| 克拉玛依市| 广汉市| 和政县| 丽水市| 梨树县| 寿宁县| 麻城市| 三门峡市| 百色市| 桂阳县| 陆河县| 无棣县| 田阳县| 芦溪县|