Android 小技巧

百密一疏發表於2020-08-11

剛接手一個專案如何快速知道介面與activity的對應關係

剛匯入一個專案時可能不太熟悉專案的結構,有些專案寫的也比較難懂,難以從xml檔案和實際的介面相對應。這裡有兩種方法。

從ADB除錯入手

再Androidstudio自帶的Terminal中或系統的命令列中輸入: adb shell "dumpsys window | grep mCurrentFocus"
即可顯示當前你的模擬器/真機開啟的介面對應的activity,如果你是用Linux開發,請去掉引號

或者通過簡單的反射獲取activity

如果你的activity沒有繼承一個統一的baseactivity那麼需要讓所有activity都繼承自己寫的baseactivity,之後只需要再baseactivity中生命週期oncreate或其他新增
Log.e("baseActivity", "cross base activity"+getClass().getSimpleName());
即可在顯示各個建立的activity了。
同時再談一下Java的反射,Java的反射對於小白來說都覺得很複雜,但其實可以簡單的使用,如上面說的方法,

apple.getclass.getSimpleName();
apple.getclass.getName();
apple.getclass.getCanonicalName();

以上三種都是簡單使用反射的例子,第一個是簡單從原始碼中返回例項名稱,第二個是返回實體型別名稱,第三個是規範定義格式輸出。
簡單來說,simplename只會返回簡單的實體類名,而getname會返回包名+類名,如果是陣列類頭部會返回L,而getCanonicalName是規範化,如是陣列會加上[]。
simple只是去掉getCanonicalName的包名。在匿名類的情況注意返回的值可能為空