EMUI,你遮蔽廣告需要這麼趕盡殺絕麼?
昨天遇到一個比較詭異的問題,一個頁面的底部一個模組UI,在榮耀9i上始終不顯示,抓包看了資料都沒有問題。
模組是在ListView
的footer
中,剛開始懷疑是footer
導致的問題,但是其他的手機都沒有問題,所以確認一遍程式碼沒有問題便放棄了這個方向。
使用Tools->Layout Inspector
檢視頁面的佈局,發現那個模組沒有顯示,是因為visibility
的屬性是GONE
,這時候就覺得很奇怪了,明明都有資料了,所以地方都設定顯示了。怎麼最後會是GONE
屬性呢?
然後同事就開始懷疑這個模組的setVisibility
的方法了,於是重寫了方法加上一句日誌,列印visibility
的值,結果發現比正常邏輯呼叫setVisibility
方法的次數要多一次。
於是debug斷點確認問題,除了剛開始隱藏,到資料返回回來顯示UI之後,有呼叫了setVisibility
方法。從方法呼叫堆疊的記錄中看到,呼叫setVisibility
方法的是blockAdClick.HwButton
,而之後的呼叫時View
的原始碼呼叫,繼續往下看會發現有當前模組的setVisibility
方法。
看到這裡,有了一個新的推論:是不是榮耀9i對呼叫setVisibility
方法的類有廣告相關的關鍵詞(例如:ad,廣告)判斷,如果包含這類詞會在底層攔截系統方法,並在此隱藏。這樣詭異的問題才能解釋的通。
於是重新命名了UI模組的類名,執行測試一下,問題就解決了。
以後打算以後用Hw來代替Ad這個關鍵詞,EMUI有本事你把這個關鍵詞也過濾啊!