今天發(fā)現(xiàn)自己的APP在AS中調(diào)試是可以正常使用的,但是將APK復(fù)制到手機(jī)中辐董,發(fā)現(xiàn)出現(xiàn)閃退的問(wèn)題悴品。
從Log中有下面的錯(cuò)誤:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
根據(jù)網(wǎng)上查到三種情況,但是對(duì)比代碼沒(méi)有發(fā)現(xiàn)什么問(wèn)題简烘。
解決辦法:重新打開(kāi)項(xiàng)目苔严,clean project一下,重新build APK孤澎,然后將APK復(fù)制到手機(jī)中就可以了届氢。
根本原因: 第一個(gè)APK是debug過(guò)程中生成的APK,而Debug是選擇Instant Run覆旭。
不能實(shí)例化activity有如下三種情況:
1.沒(méi)有在Manifest.xml 清單中注冊(cè)該activity退子,或者在創(chuàng)建完activity后岖妄,修改了包名或者activity的類名,而配置清單中沒(méi)有修改寂祥,造成不能實(shí)例化荐虐。
2.自己新建了一個(gè)包,而注冊(cè)時(shí)候依然用的默認(rèn)包壤靶,例如缚俏,默認(rèn)包是com.ghg.Dao包,你新建了一個(gè)com.ghg.DaoImpl包,并在此包中寫(xiě)了個(gè)FirstActivity贮乳,在manifest.xml中注冊(cè)時(shí)你寫(xiě)的是<activity android:name=".FirstActivity"/>,此時(shí)相當(dāng)于你在的類注冊(cè)到了默認(rèn)包中忧换,系統(tǒng)在默認(rèn)包中是找不到的,因?yàn)槟愕腇irstActivity在com.ghg.DaoImpl包下向拆,所以你注冊(cè)時(shí)應(yīng)寫(xiě)成包名加類名亚茬,如:<activity android:name="com.ghg.DaoImpl.FirstActivity";這樣系統(tǒng)才能在指定的包中找到對(duì)應(yīng)的類。
3.還用一種就是你的FirstActivity定義成了抽象類浓恳,這種情況好像一般人不會(huì)犯刹缝。
如果上述三種情況都考慮到了,還會(huì)拋出此異常颈将,那么就查看一下activity類里是否同時(shí)存在這個(gè)類的構(gòu)造函數(shù)和oncreate()梢夯,如果是,那么刪除構(gòu)造函數(shù)試試晴圾,并把初始化放到
oncreate()中試試颂砸。
增加第4種:
項(xiàng)目代碼移動(dòng)另外的目錄中,需要將app/build目錄刪除死姚,然后重新編譯就可以了人乓。