“android:process“---由日志引发的大灾难
??? 本人菜鳥一枚,這幾天在修改一個(gè)項(xiàng)目,昨天在一個(gè)問題上卡住了,直接卡了一天,后來問了問高手才知道是個(gè)小問題。
??? 這是一個(gè)由android:process不同進(jìn)程導(dǎo)致的大災(zāi)難!寫下來警戒自己。
??? 其中要由notification打開一個(gè)activity,但是總是一閃而過,而且activity中的打印信log一直沒有(oncreate一開始就打印了),所有本能懷疑是activity沒成功打開。研究notification的構(gòu)建好長時(shí)間,覺得應(yīng)該沒問題。debug一下發(fā)現(xiàn)進(jìn)activity了,遇到錯(cuò)誤關(guān)閉了,但是log一直沒有。正是因?yàn)闆]有l(wèi)og,我才沒想到原來已經(jīng)在acitivity里運(yùn)行了。覺得這是個(gè)大問題,為啥沒log呢,其他log都能打印出來。
??? 仔細(xì)看了看logcat,發(fā)現(xiàn)了一點(diǎn)小問題,自己重新創(chuàng)建了一個(gè)過濾,這下能看清楚了。
??? 可以看到有倆個(gè)不同的application標(biāo)簽,而運(yùn)行程序自動(dòng)顯示的是帶.action的過濾,所以下面的就不顯示了,這樣有些日志就隱藏了。。。。。
??? 但這只是表面的問題,是什么原因?qū)е逻@樣的?包名是沒有.action的,為啥會(huì)出現(xiàn)第一個(gè)標(biāo)簽?看了好久,上午查了也沒有看到有用的信息,后來問一個(gè)高手,問題立解!
???android:process!!!
??? 在main.xml文件中,這個(gè)程序?yàn)橐粋€(gè)receiver添加了android:process標(biāo)簽,內(nèi)容就是包名+.action!!目的是開啟一個(gè)不同的進(jìn)程來運(yùn)行下面的代碼,這樣application就不同了。當(dāng)調(diào)用其他的activity時(shí),由于那個(gè)acticvity沒有這個(gè)標(biāo)簽,所以就是默認(rèn)的進(jìn)程,application就是包名。這樣就導(dǎo)致了不同的日志!!
??? 在網(wǎng)上查了查android:process有關(guān)信息,多學(xué)了一點(diǎn)東西。下面是引用網(wǎng)上的:
定義activity運(yùn)行所在的進(jìn)程名稱。一般情況下,應(yīng)用的所有組件都運(yùn)行在為應(yīng)用創(chuàng)建的默認(rèn)的進(jìn)程中,該默認(rèn)進(jìn)程的名稱應(yīng)用包名稱一致。通過定義<application>元素的“process”屬性可以為所有組件指定一個(gè)不同的默認(rèn)進(jìn)程。但是任意組件都可以重寫默認(rèn)進(jìn)程,以便實(shí)現(xiàn)多進(jìn)程操作。
如果該屬性指定名稱以“:”開頭,則一個(gè)新的專屬于該應(yīng)用的進(jìn)程將會(huì)被創(chuàng)建。如果該進(jìn)程名以小寫字母開頭,則為該activity提供權(quán)限以讓其在一個(gè)全局的進(jìn)程中運(yùn)行。這樣會(huì)允許多個(gè)應(yīng)用的不同組件共用一個(gè)進(jìn)程,以便節(jié)省資源。
?
Android是支持多進(jìn)程的,每個(gè)進(jìn)程的內(nèi)存使用限制一般為24MB的內(nèi)存,所以當(dāng)完成一些很耗費(fèi)內(nèi)存的操作如處理高分辨率圖片時(shí),需要單獨(dú)開一個(gè)進(jìn)程來執(zhí)行該操作(上面的配置可以用來實(shí)現(xiàn)該操作)。即便如此,開發(fā)者還是不要隨意多開進(jìn)程來耗費(fèi)用戶的資源。(內(nèi)存限制,有16MB,24MB, 32MB,很老的機(jī)型的內(nèi)存限制會(huì)是16MB,這個(gè)具體還要再搜索下資料。
?
總結(jié)
以上是生活随笔為你收集整理的“android:process“---由日志引发的大灾难的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac 编译报错 symbol(s) n
- 下一篇: Notification大图标修改问题种