1. 背景:
同事在小米手機上使用Google Service 進行定位和獲取POI時,調(diào)用方法執(zhí)行后,未獲取到任何回調(diào),無成功無失敗。
2.排查:
用該小米手機連上USB,未能識別,遂放棄該手機聯(lián)調(diào)。
乃用HUAWEI Nova來調(diào)試,因為nova也定位不到。(但是,nova是有任務(wù)結(jié)束回調(diào)的)
提出猜想:
A.Google服務(wù)不可用
通過調(diào)用GoogleApiAvailability,得到結(jié)果result = SUCCESS,即可用。懷疑該API的使用價值。
B.Google服務(wù)可用,但是接口調(diào)不通。
未找到判斷某個接口可用的判斷方法。
C.還是缺少某個服務(wù)組件。
無法判斷是哪個。
D.Google服務(wù)框架版本不對
參考HUAWEI Mate 10,安裝了Google服務(wù)框架,經(jīng)測試問題沒有改變。
以上思路,無法解決問題,卡住了。
這個時候,新的一周,新的思路:
同事自己連上小米手機,通過GoogleApiAvailability調(diào)用,得到result = INVALID,即不可用。那么也就是說,官方Serivce API的使用價值無需懷疑??傻茫琻ova的Google Service確實可用。那么為什么調(diào)不通呢?根據(jù)小米和nova的不同反饋,推出猜想:
nova的錯誤和小米不一樣,nova有另外的錯誤。
排查查看logcat,發(fā)現(xiàn)了錯誤,網(wǎng)上搜查,懷疑是Google Service版本與系統(tǒng)不兼容,內(nèi)部出現(xiàn)了錯誤。即Google Service進程有問題。
驗證:將應(yīng)用中的Google Service相關(guān)一律卸載,再次調(diào)用GoogleApiAvailability判斷是否可用,返回INVALID,即不可用。證明上面推斷。
3.解決方案:
考慮的國外默認Google服務(wù)可用且版本正確,在方法執(zhí)行時,事先判斷GoogleApiAvailability是否可用。
4.總結(jié)
在解決該問題時,犯了許多錯誤,致使花費時間較長,大概兩三天,如果方向正確的話,根本不需要這么久時間,一天足夠了。錯誤如下:
1.懷疑GoogleApiAvailability的可用性,不該不該。
2.未對錯誤手機小米和nova進行對比分析,致使變量較多,只能亂猜亂試。
3.未對nova的異常情況認真分析,對nova的錯誤未重視,把nova的錯誤等同為小米的錯誤。
4.只考慮到更換google服務(wù)框架,未考慮到完全卸載的場景。
5.未對小米手機進行調(diào)試,也就是沒有對病人進行針對性檢查,卻換了一個相似的病人進行排查,卻不曾想,兩者表象相同,但實際問題并不一樣。實乃庸醫(yī)。
無數(shù)事實證明,解決問題的思路很重要。謹記!