今天發現自己的APP在AS中調試是可以正常使用的,但是將APK復制到手機中,發現出現閃退的問題。
從Log中有下面的錯誤:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
根據網上查到三種情況,但是對比代碼沒有發現什么問題。
解決辦法:重新打開項目,clean project一下,重新build APK,然后將APK復制到手機中就可以了。
根本原因: 第一個APK是debug過程中生成的APK,而Debug是選擇Instant Run。
不能實例化activity有如下三種情況:
1.沒有在Manifest.xml 清單中注冊該activity,或者在創建完activity后,修改了包名或者activity的類名,而配置清單中沒有修改,造成不能實例化。
2.自己新建了一個包,而注冊時候依然用的默認包,例如,默認包是com.ghg.Dao包,你新建了一個com.ghg.DaoImpl包,并在此包中寫了個FirstActivity,在manifest.xml中注冊時你寫的是<activity android:name=".FirstActivity"/>,此時相當于你在的類注冊到了默認包中,系統在默認包中是找不到的,因為你的FirstActivity在com.ghg.DaoImpl包下,所以你注冊時應寫成包名加類名,如:<activity android:name="com.ghg.DaoImpl.FirstActivity";這樣系統才能在指定的包中找到對應的類。
3.還用一種就是你的FirstActivity定義成了抽象類,這種情況好像一般人不會犯。
如果上述三種情況都考慮到了,還會拋出此異常,那么就查看一下activity類里是否同時存在這個類的構造函數和oncreate(),如果是,那么刪除構造函數試試,并把初始化放到
oncreate()中試試。
增加第4種:
項目代碼移動另外的目錄中,需要將app/build目錄刪除,然后重新編譯就可以了。