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