? 1.? Activity ca.ct.activity.OBaccaratActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42db0500 that was originally added here? ? ? ? ? ? ? ? ? ~~~ 出現(xiàn)錯(cuò)誤的情景是:當(dāng)我點(diǎn)擊返回鍵,退出一個(gè)activity進(jìn)入另一個(gè)activity的時(shí)候材义,有一個(gè)dialog惶洲,或者是其他的組件在提示古劲,但是這個(gè)時(shí)候我著急又很快的按了一下返回鍵就報(bào)這樣的錯(cuò)誤? ? ? ? ? ~~~ 解決方法:在dialog中添加一下代碼? ? [java] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? public void onDestroy(){? ? ? ? ? ? ? super.onDestroy();? ? ? ? ? ? ? if(dialog !=null){? ? ? ? ? ? ? ? ? dialog.dismiss();? ? ? ? ? ? ? ? ? dialog =null;? ? ? ? ? ? ? }? ? ? ? ? }? ? ? 2.Fatal signal 11 (SIGSEGV) at 0x00000040 (code=1), thread 20476 (.example.new)? ? ? ? ? ? ~~~出現(xiàn)錯(cuò)誤的情景:同樣的呻顽,某個(gè)頁(yè)面有視頻播放器河哑,調(diào)用surface斑匪,和jni吞杭,當(dāng)我點(diǎn)擊返回鍵盏浇,然后在很快的點(diǎn)擊一下以后,會(huì)報(bào)上面的東西芽狗,但是并沒(méi)有java的異尘铌或者其他提示信息出現(xiàn)? ? ? ? ? ? ~~~解決方法:目前并沒(méi)有找到解決的辦法。也不知道什么原因译蒂。但是有一篇博客寫(xiě)的和我的qi類(lèi)似曼月,但是照著他的方法并沒(méi)有解決我的問(wèn)題。http://blog.csdn.net/sonikk/article/details/9217181? ? 3.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.? ? ? ? ~~~在非主線程中直接設(shè)置組件會(huì)拋出這樣的異常柔昼。比如我為了簡(jiǎn)單在線程中為T(mén)extView.setText().這個(gè)在低版本中是可以運(yùn)行哑芹。高版本中操作頁(yè)面的必須在主線程中。這里只能用handler? ? 4捕透,ava.lang.IllegalStateException: Could not execute method of the activity? ? ? ? ? ? Caused by: java.lang.reflect.InvocationTargetException? ? ? ? ? ? Caused by: java.lang.NullPointerException? ? ? ? ? ? 說(shuō)白了就是無(wú)法執(zhí)行和activity相關(guān)的方法,為什么無(wú)法執(zhí)行呢,因?yàn)槟憬o系統(tǒng)的是空引用,出現(xiàn)空指針錯(cuò)誤? ? ? ? ? ? 造成這種因素的原因很多,我目前已知的,就是代碼的順序問(wèn)題,在onCreate方法中聪姿。? ? 5.has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added here? ? ? ? ? ~~~出現(xiàn)錯(cuò)誤的情景:? ? 經(jīng)常在應(yīng)用中需要處理一些耗時(shí)的工作,諸如讀取大文件乙嘀、訪問(wèn)網(wǎng)絡(luò)資源等末购。為了避免因程序假死而帶來(lái)的糟糕用戶(hù)體驗(yàn),通常我們可以通過(guò)線程+Handler或者Android提供的AsyncTask來(lái)解決該問(wèn)題虎谢,并一般以ProgressDialog等提示性控件來(lái)告知用戶(hù)當(dāng)前的程序進(jìn)度盟榴。而標(biāo)題中描述的異常則會(huì)常常出現(xiàn)在這樣的場(chǎng)景中,并且往往掩蓋了導(dǎo)致異常的真正的罪魁禍?zhǔn)住? ? ? ? ? ~~~問(wèn)題原因:? ? 從異常描述中婴噩,大致的意思是存在窗口句柄泄露擎场,即未能及時(shí)銷(xiāo)毀某個(gè)PhoneWindow。而這往往誤導(dǎo)了我們几莽,把過(guò)多的精力放在查找所謂的內(nèi)存泄露上了迅办。其實(shí)存在這么一種情況,即因我們?cè)诜侵骶€程中的某些操作不當(dāng)而產(chǎn)生了一個(gè)嚴(yán)重的異常章蚣,從而強(qiáng)制當(dāng)前Activity被關(guān)閉站欺。而在關(guān)閉的同時(shí),卻沒(méi)能及時(shí)的調(diào)用dismiss來(lái)解除對(duì)ProgressDialog等的引用,從而系統(tǒng)拋出了標(biāo)題中的錯(cuò)誤矾策,而掩蓋了真正導(dǎo)致這個(gè)錯(cuò)誤的異常信息磷账。? ? ? ? ? ~~~解決方法之一:? ? 本解決方法并不能真正的解決問(wèn)題,但是在一定程度上可以將真正導(dǎo)致錯(cuò)誤的異常信息顯露出來(lái)蝴韭。即重寫(xiě)Activity的onDestroy方法够颠,在方法中調(diào)用dismiss來(lái)解除對(duì)ProgressDialog等的引用熙侍。? ? 6.遇到過(guò)兩次榄鉴,在RelativeLayout中當(dāng)我將兩個(gè)組件調(diào)換位置一個(gè)在上一個(gè)在下時(shí),在activity中實(shí)例化這個(gè)組件就會(huì)報(bào)類(lèi)型轉(zhuǎn)換異常蛉抓,目前沒(méi)找到問(wèn)題原因庆尘。? ? 7.Unable to start activity ComponentInfo{com.example.new855/ca.ct.activity.FanTanActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class? ? ? ? Caused by: java.lang.OutOfMemoryError:? ? ? ? ? ? ? ? 理由以及原因:At runtime, Android resize's images based on need (based on the screen size and resolution). It uses Bitmap's for doing the resizing internally. Which, obviously, is very memory intensive (kinda allocates memory like crazy). One quick way to fix such issues can be, that you copy all drawable files to drawable-ldpi, mdpi, hdpi folders. This way android will just pick up the files from these folders and not resize them.? ? 簡(jiǎn)單點(diǎn)內(nèi)存泄漏,這個(gè)是一大篇幅的內(nèi)容巷送,需要慢慢去研究驶忌。? ? 8.IllegalArgumentException: View not attached to window manager? ? 引起的原因:A應(yīng)用在使用Intent顯示啟動(dòng)其他應(yīng)用,當(dāng)關(guān)閉其他應(yīng)用顯A應(yīng)用界面時(shí)報(bào)錯(cuò)笑跛。? ? 解決方法1:? ? A應(yīng)用使用startActivityForResult(intent)啟動(dòng)其他應(yīng)用? ? 解決方法2:? ? 關(guān)閉其他應(yīng)用時(shí)每次都使用Intent重新拉起一遍A應(yīng)用? ? 在A中啟動(dòng)B付魔,B中有線程操作,結(jié)束時(shí)涉及到對(duì)話(huà)框的dismiss飞蹂。如果在操作尚未結(jié)束時(shí)几苍,按下HOME鍵,線程后臺(tái)操作陈哑。此時(shí)重新進(jìn)去A妻坝,等到線程操作完成就會(huì)出現(xiàn)這個(gè)異常。此時(shí)應(yīng)該做一個(gè)判斷惊窖,如下:? ? [java] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? // Dismiss the Dialog only when the parent Activity is still alive.? ? ? ? ? if (SelectContactsActivity刽宪!=null&&!SelectContactsActivity.this.isFinishing()) {? ? ? ? ? ? ? ? mProgressDialog.dismiss();? ? ? ? ? }? ? ? 9.IllegalArgumentException: connection is null? ? ? 有時(shí)候同樣的代碼,在一個(gè)機(jī)子上可以正常執(zhí)行界酒,在另一個(gè)機(jī)子上就會(huì)報(bào)這也的異常圣拄。這是因?yàn)榻壎ǚ?wù)的時(shí)候bindService(intent, null, BIND_AUTO_CREATE);這也寫(xiě)的,但是高版本中ServiceConnection不能為空毁欣。所以要new一個(gè)出來(lái)庇谆。應(yīng)該這也寫(xiě)? ? [java] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? bindService(intent, new ServiceConnection() {? ? ? ? ? ? ? @Override? ? ? ? ? ? ? public void onServiceDisconnected(ComponentName name) {? ? ? ? ? ? ? ? ? // TODO Auto-generated method stub? ? ? ? ? ? ? }? ? ? ? ? ? ? @Override? ? ? ? ? ? ? public void onServiceConnected(ComponentName name, IBinder service) {? ? ? ? ? ? ? ? ? // TODO Auto-generated method stub? ? ? ? ? ? ? }? ? ? ? ? }, BIND_AUTO_CREATE);? ? ? ? 10、 你后臺(tái)的Activity被系統(tǒng)回收怎么辦:onSaveInstanceState? ? 當(dāng)你的程序中某一個(gè)Activity A 在運(yùn)行時(shí)中署辉,主動(dòng)或被動(dòng)地運(yùn)行另一個(gè)新的Activity B 這個(gè)時(shí)候A會(huì)執(zhí)行? ? Java代碼? ? [java] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? ? public void onSaveInstanceState(Bundle outState) {? ? ? ? ? ? ? super.onSaveInstanceState(outState);? ? ? ? ? ? ? outState.putLong("id", 1234567890);? ? ? ? ? ? }? ? ? ? ? public void onSaveInstanceState(Bundle outState) {? ? ? ? ? ? ? ? ? super.onSaveInstanceState(outState);? ? ? ? ? ? ? ? ? outState.putLong("id", 1234567890);? ? ? ? ? }? ? ? B 完成以后又會(huì)來(lái)找A, 這個(gè)時(shí)候就有兩種情況族铆,一種是A被回收,一種是沒(méi)有被回收哭尝,被回 收的A就要重新調(diào)用onCreate()方法哥攘,不同于直接啟動(dòng)的是這回onCreate()里是帶上參數(shù)savedInstanceState,沒(méi)被收回的就還是onResume就好了。? ? savedInstanceState是一個(gè)Bundle對(duì)象逝淹,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個(gè)Map對(duì)象耕姊。在onCreate()里你可能會(huì)用到它,如果正常啟動(dòng)onCreate就不會(huì)有它栅葡,所以用的時(shí)候要判斷一下是否為空茉兰。? ? 11. 如何將SQLite數(shù)據(jù)庫(kù)(dictionary.db文件)與apk文件一起發(fā)布?? ? ? ? 解答:可以將dictionary.db文件復(fù)制到Eclipse Android工程中的resaw目錄中。所有在resaw目錄中的文件不會(huì)被壓縮欣簇,這樣可以直接提取該目錄中的文件规脸。可以將dictionary.db文件復(fù)制到resaw目錄中? ? 12.Gradle DSL method not found: 'runProguard()'? ? 要讓sync成功熊咽,改下gradle的版本就可以了莫鸭,如下:? ? dependencies {? ? ? ? ? ? classpath 'com.android.tools.build:gradle:0.14.1'? ? ? ? ? ? // NOTE: Do not place your application dependencies here; they belong? ? ? ? ? ? // in the individual module build.gradle files? ? ? ? }? ? 但是真正的解決辦法是將一下內(nèi)容更換就可以? ? [html] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? buildTypes {? ? ? ? ? ? ? release {? ? ? ? ? ? ? ? ? runProguard false // 已經(jīng)被廢棄并且停止使用了? ? ? ? ? ? ? ? ? ......? ? ? ? ? ? ? }? ? ? ? ? }? ? ? new:? ? [html] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? buildTypes {? ? ? ? ? ? ? release {? ? ? ? ? ? ? ? ? minifyEnabled false // 替代的方式? ? ? ? ? ? ? ? ? ......? ? ? ? ? ? ? }? ? ? ? ? }? ? ? 13:Gradle version 2.10 is required. Current version is 2.8 Error? ? https://services.gradle.org/distributions/gradle-2.10-all.zip? 從該鏈接下載文件? ? Settings > Builds,Execution,Deployment > Build Tools > Gradle >Gradle home path。 修改2.8的目錄改為2.10? ? 14:cannot perform this action after onsaveinstancestate横殴。? ? 百度了一下被因,都說(shuō)將commit替換成commitAllowingStateLoss就可以了。(我的問(wèn)題在于在onResume()方法內(nèi)使用fragment的commit)這樣替換的確解決了問(wèn)題衫仑,但是后來(lái)仔細(xì)研究了下才發(fā)現(xiàn)事情沒(méi)這么簡(jiǎn)單梨与。? ? 拋出異常的原因? ? 眾所周知,Android系統(tǒng)可以為了釋放資源在任意時(shí)刻終止進(jìn)程文狱,有些后臺(tái)運(yùn)行的進(jìn)程可能都不會(huì)有任何提示的被殺粥鞋。而onSaveInstanceState()就是給activity一個(gè)最后機(jī)會(huì)去保存它需要保存的東西,bundle對(duì)象就是所要保存信息的載體被傳到系統(tǒng)服務(wù)進(jìn)程如贷,如果有朝一日該activity被重新創(chuàng)建時(shí)陷虎,該對(duì)象就會(huì)被傳回幫助activity重現(xiàn)先前的狀態(tài)。那么拋出異常的原因在哪兒呢杠袱?事實(shí)上bundle對(duì)象僅僅是activity在調(diào)用onSaveInstanceState()時(shí)的快照尚猿,也就意味著在onSaveInstanceState()后使用FragmentTransaction#commit()時(shí),bundle并沒(méi)有對(duì)該transaction作保存而在activity還未恢復(fù)到最初狀態(tài)時(shí)調(diào)用楣富,這樣便會(huì)出現(xiàn)UI的丟失凿掂,為了保護(hù)用戶(hù)體驗(yàn)IllegalStateException就被拋出了。? ? 版本差異? ? 如何避免? ? 1 在activity生命周期方法內(nèi)使用FragmentTransaction#commit()應(yīng)謹(jǐn)慎? ? ? 多數(shù)的應(yīng)用會(huì)在onCreate()中使用該方法纹蝴,所以不會(huì)遇到這樣的問(wèn)題庄萎,但如果在onActivityResult(), onStart()或onResume()中使用時(shí)就有可能遇到了。那么如果因?yàn)橐恍┰蛞欢ㄒ谶@些方法中使用FragmentTransaction#commit()該怎么辦呢(比如說(shuō)從下一個(gè)頁(yè)面回來(lái)時(shí)需要刷新界面的時(shí)候)塘安。這時(shí)最好在FragmentActivity#onResumeFragments()或者Activity#onPostResume()中使用糠涛。這兩個(gè)方法會(huì)保證在activity恢復(fù)到最初狀態(tài)后被調(diào)用。? ? 2 commitAllowingStateLoss()只能當(dāng)做最后的手段? ? ? ? commit和commitAllowingStateLoss()之間的唯一區(qū)別是如果狀態(tài)丟失后者僅僅是不拋出異常而已兼犯。一般情況下你不會(huì)想用這個(gè)方法因?yàn)樗匀粫?huì)有狀態(tài)丟失的可能忍捡。? ? 由于在百度上看到多數(shù)的解決辦法是使用commitAllowingStateLoss()集漾,并非說(shuō)這個(gè)辦法不行,而是盡量精益求精砸脊,找到問(wèn)題的本質(zhì)所在具篇。翻譯有出入 ,請(qǐng)盡量看原文凌埂。? ? 詳細(xì)的信息請(qǐng)參考原作者文章:http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html? ? 15:Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.MainActivity}: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.? ? 產(chǎn)生的原因是:com.android.support:appcompat-v7與rasterized vectors不兼容驱显,gradle2.0及其之上,library的資源沒(méi)有柵格化瞳抓,所以不會(huì)發(fā)生這個(gè)問(wèn)題? ? 2. 解決方案:? ? 1.在projectgradle中將gradle版本改為2.0或者之上? ? 2. 再次運(yùn)行,此時(shí)控制臺(tái)輸出異常:? ? [html] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? Warning:Gradle version 2.10 is required. Current version is 2.8. If using the gradle wrapper, try editing the distributionUrl in xxx\bbb\gradle-wrapper.properties to gradle-2.10-all.zip? ? ? 按照路徑所指出的地址埃疫,找到文件gradle-wrapper.properties,編輯最后一句版本號(hào)為日志中所輸出的版本? ? [html] view plain copy? ? 在CODE上查看代碼片派生到我的代碼片? ? ? ? distributionBase=GRADLE_USER_HOME? ? ? ? ? distributionPath=wrapper/dists? ? ? ? ? zipStoreBase=GRADLE_USER_HOME? ? ? ? ? zipStorePath=wrapper/dists? ? ? ? ? distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip? ? ? 3. 再次運(yùn)行挨下,還是錯(cuò)誤熔恢,原因是你還沒(méi)有下載gradle-2.10? ? 這時(shí)可以從網(wǎng)上下載一個(gè)gradle-2.10.zip并解壓脐湾,然后放到AndroidStudiodd的默認(rèn)gradle配置目錄
Android中常見(jiàn)異常處理
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)瓶竭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渠羞,你說(shuō)我怎么就攤上這事斤贰。” “怎么了次询?”我有些...
- 文/不壞的土叔 我叫張陵荧恍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屯吊,道長(zhǎng)送巡,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任盒卸,我火速辦了婚禮骗爆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔽介。我一直安慰自己糟需,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布谷朝。 她就那樣靜靜地躺著洲押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圆凰。 梳的紋絲不亂的頭發(fā)上杈帐,一...
- 那天,我揣著相機(jī)與錄音专钉,去河邊找鬼挑童。 笑死,一個(gè)胖子當(dāng)著我的面吹牛跃须,可吹牛的內(nèi)容都是我干的站叼。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼菇民,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尽楔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起第练,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阔馋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娇掏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呕寝,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年婴梧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了下梢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站钧舌,受9級(jí)特大地震影響担汤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洼冻,卻給世界環(huán)境...
- 文/蒙蒙 一崭歧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撞牢,春花似錦率碾、人聲如沸叔营。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绒尊。三九已至,卻和暖如春仔粥,著一層夾襖步出監(jiān)牢的瞬間婴谱,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓麦向,卻偏偏與公主長(zhǎng)得像瘟裸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诵竭,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
- 今天我很不開(kāi)心话告,因?yàn)槲液惹煽肆λ崮痰臅r(shí)候擠了一身,媽媽就訓(xùn)我了秀撇,媽媽看到我弄到身上了還就是一個(gè)勁的擠超棺,都把我訓(xùn)哭了。
- 附:大部分標(biāo)簽的屬性保留在html屬性里 1.div所具有的id屬性class屬性 為div提供一個(gè)唯一的名稱(chēng)呵燕,用...