java.lang.RuntimeException:Unable to start activity ComponentInfo{com.meizu.beautify/com.my.viewc.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.meizu.main.ResourcesDetailedActivity: make sure class name exists, is public, and has an empty constructor that is public
做了這麼久的安卓開發,還是會常常遇到這樣的問題:自己測試沒有問題的APP上線後,總有用戶回饋遭遇了bug。但是使用者遇到的這些問題,又沒有辦法在模擬環境中找到對應的日誌。那時候,還不知道騰訊有專門監測Crash的工具bugly,也找不到用戶去來配合測試,所以每次遇到用戶回饋問題,都要搞上好幾天。運氣不好的時候,幾天過去了,還是找不到問題的根源。
我們的產品歷經了若干個版本,這個問題一直沒有改善,實在令人抓狂。秉承品質為上的態度,我找到了騰訊的bugly,並在新版產品發佈時,就第一時間接入了。產品發布後查看上報記錄,還真是不看不知道一看嚇一跳。錯誤日誌有幾十種,影響使用者也不小,於是趕緊解決。
舉個例子:
有個使用者回饋很多的問題,由於缺乏堆疊和環境訊息,我們一直沒有找到問題所在。接入bugly後得知出錯行在:
由於只是部分設備出現,在百度與谷歌上也找不到對應的資料,所以我當時一直認為這是安卓自己的bug。
後來存取使用了bugly,上報結果為:
[] []
這才發現原來是FragmentActivity的問題。透過Message查閱原始碼可知,使用Fragment時,無法自己寫有參數的建構函數,因為系統預設呼叫的是無參構造函數 newResourcesDetailedActivity(String cc);java.lang.NoSuchMethodException
java.lang.RuntimeException:Unable to start activity ComponentInfo{com.meizu.beautifyify /com.my.viewc.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.meizu.main.ResourcesDetailedActivity: make sure class name exists, is public, and conor that class name exists, is public, and conoran class name 是public
具體報錯日誌:
java.lang.NoSuchMethodException:
java.lang.Class.getConstructor(Class.java:531)
java.lang.Class.getDeclaredConstructor(java:531)
java.lang.Class.getDeclaredConstructor( Class.java:510)
java.lang.Class.newInstance(Class.java:1561)
android.support.v4.app.Fragment.instantiate(Fragment.java:420)
android.support .v4.app.FragmentState.instantiate(Fragment.java:101)
android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1823)
android.support.v4.appon.FateActivity. (FragmentActivity.java:264)
com.my.viewc.MainActivity.onCreate(MainActivity.java:22)
否則在創建Fragment時,系統會呼叫無參構造函數,而你重新寫了帶參數的構造函數,導致系統找不到這個方法,最後就出現
java.lang.NoSuchMethodException:
而且找不到報錯的程式碼行,只要將其改為:newResourcesDetailedActivity();
最後非常感謝騰訊的BUGLY,這個工具實在太給力了,絕對是安卓開發中必不可少的一個sdk,現在所有服務都是免費的,在提升產品質量的同時,還降低了產品開發成本。