Android開發(fā)遇到的問題

1.GLSurfaceView把上層的View遮蓋

在使用GLSurfaceView開發(fā)的時候,會調到到setZOrderOnTop(boolean onTop)這個方法汽煮,而這個方法大概的意思是將GLSurfaceView放置到window界面的最上層匀们,所以GLSurfaceView上面是不會顯示其他View的献汗。下面這個段是官方對這個方法的介紹。

Control whether the surface view's surface is placed on top of its window. Normally it is placed behind the window, to allow it to (for the most part) appear to composite with the views in the hierarchy. By setting this, you cause it to be placed above the window. This means that none of the contents of the window this SurfaceView is in will be visible on top of its surface.

Note that this must be set before the surface view's containing window is attached to the window manager. If you target `[Build.VERSION_CODES#R](https://developer.android.google.cn/reference/android/os/Build.VERSION_CODES#R)` the Z ordering can be changed dynamically if the backing surface is created, otherwise it would be applied at surface construction time.

Calling this overrides any previous call to [setZOrderMediaOverlay(boolean)](https://developer.android.google.cn/reference/android/view/SurfaceView#setZOrderMediaOverlay(boolean)).

在這段官方介紹的最后提到了setZOrderMediaOverlay(boolean isMediaOverlay)這個方法资厉,下面是setZOrderMediaOverlay的官方介紹厅缺,這段介紹不太好理解,根據(jù)我自身的使用和理解宴偿,這段介紹的意思是調用setZOrderMediaOverlay方法后湘捎,GLSurfaceView依然會顯示在最上面,只是會在對應的位置開一個口顯示需要置頂?shù)腣iew窄刘。

Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself). This is typically used to place overlays on top of an underlying media surface view.

Note that this must be set before the surface view's containing window is attached to the window manager.

Calling this overrides any previous call to `[setZOrderOnTop(boolean)](https://developer.android.google.cn/reference/android/view/SurfaceView#setZOrderOnTop(boolean))`.

2.使用Arrays將數(shù)組轉集合窥妇,再進行添加或移除的時候報UnsupportedOperationException錯誤

在Arrays類里面有一個自定義的ArrayList類,而這個類并沒有實現(xiàn)add和remove方法娩践,在AbstractList類中活翩,這個兩個方法直接拋出UnsupportedOperationException錯誤,所以在使用Arrays的asList方法的時候要注意得到的ArrayList集合并不是我們平時使用java.util.ArrayList類得到的集合

3.Type BuildConfig is defined multiple times

在多模塊開發(fā)的時候欺矫,如果AndroidManifest.xml文件中的package相同則會導致出現(xiàn)這個問題纱新。

4.當背景資源設置成select的時候,當view的enable設置成false的時候沒有切換到對應enable=false的資源

錯誤的順序:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_func1_radius_60" android:state_pressed="false" />
    <item android:drawable="@drawable/shape_func14_radius_60" android:state_pressed="true" />
    <item android:drawable="@drawable/shape_func1_radius_60" android:state_enabled="true" />
    <item android:drawable="@drawable/shape_func14_radius_60" android:state_enabled="false" />
</selector>

根據(jù)你提供的selector資源穆趴,當View處于disabled狀態(tài)時脸爱,它的背景色應該顯示為@drawable/shape_func14_radius_60對應的顏色。但是未妹,你發(fā)現(xiàn)當View的android:enabled屬性設置為false時簿废,它的背景色并沒有顯示為@drawable/shape_func14_radius_60對應的顏色。

這種情況可能是由于selector資源中的item順序導致的络它。在selector資源中族檬,item的順序很重要,因為它決定了哪個item會被優(yōu)先匹配化戳。在你的selector資源中单料,第三個item和第四個item都定義了android:state_enabled屬性,但是它們的順序錯誤点楼。

正確的item順序應該是這樣的:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_func14_radius_60" android:state_pressed="true" />
    <item android:drawable="@drawable/shape_func14_radius_60" android:state_enabled="false" />
    <item android:drawable="@drawable/shape_func1_radius_60" android:state_enabled="true" />
    <item android:drawable="@drawable/shape_func1_radius_60" />
</selector>

在上面的selector資源中扫尖,第一個item定義了View處于pressed狀態(tài)時的背景色,第二個item定義了View處于disabled狀態(tài)時的背景色掠廓,第三個item定義了View處于enabled狀態(tài)時的背景色换怖,第四個item定義了View處于默認狀態(tài)時的背景色。

當View的android:enabled屬性設置為false時蟀瞧,selector資源會優(yōu)先匹配第二個item沉颂,因此View的背景色會顯示為@drawable/shape_func14_radius_60對應的顏色条摸。

需要注意的是,在selector資源中铸屉,如果多個item的state屬性都匹配當前的狀態(tài)钉蒲,那么selector資源會優(yōu)先匹配第一個滿足條件的item。因此彻坛,在定義selector資源時子巾,應該盡可能地避免定義沖突的item。

5.Kotlin和Java混合使用出現(xiàn)空指針異常

當使用Kotlin實現(xiàn)Java的接口時候需要注意接口方法的參數(shù)是否能為空的問題

public interface ITestListener {
    void onTest(String data);
}
...
ITestListener listener = ...;
listener.onTest(null);
...

Java在定義接口的時候是可以不用設置參數(shù)是否能為空小压,但是在實際調用的時候是可以傳空參數(shù)進去的。
而Kotlin在實現(xiàn)這個接口的時候椰于,參數(shù)可空是需要加上怠益?代表參數(shù)可空,如果在實現(xiàn)這個接口的時候沒有加上瘾婿?蜻牢,而調用方傳參的時候使用null,這個時候就會出現(xiàn)空指針異常偏陪。

//這個是錯誤的演示
val listener = object:ITestListener {
    fun onTest(data: String) {
     //data參數(shù)沒有設置成可空抢呆,那么如果調用方傳參的時候設置null,這里就會出現(xiàn)空指針異常
    }
}

所以在做Kotlin和Java混合開發(fā)的時候笛谦,Kotlin在實現(xiàn)Java接口的時候盡量將Java中非基礎類型的參數(shù)設置成可空抱虐。

//這個是正確的演示
val listener = object:ITestListener {
    fun onTest(data: String?) {
     //data參數(shù)設置成可空,那么調用方傳來null也不會出現(xiàn)空指針異常
    }
}

6.so 崩潰堆棧解析

1.需要將崩潰的堆棧信息從*******開始保存
2.執(zhí)行./ndk-stack -sym <so庫的目錄> -dump <保存崩潰信息的文件>
3.執(zhí)行用的 ndk-stack 要使用編譯 so 庫對應的 ndk 版本饥脑,路徑一般位于Android sdk 的 NDK 目錄中

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: ''
Revision: '0'
ABI: 'arm64'
Timestamp: 
Process uptime: 55s
Cmdline: 
pid: 25202, tid: 27734, name: 
uid: 10390
tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'Scudo ERROR: invalid chunk state when deallocating address 0x20000746d42d350'
    x0  0000000000000000  x1  0000000000006c56  x2  0000000000000006  x3  00000072860fd920
    x4  64736073721f6a6d  x5  64736073721f6a6d  x6  64736073721f6a6d  x7  7f7f7f7f7f7f7f7f
    x8  00000000000000f0  x9  00000075dd68f920  x10 0000000000000001  x11 00000075dd71b4c0
    x12 00000075e31ed020  x13 000000007fffffff  x14 0000000002c0a9ea  x15 00000496365c7647
    x16 00000075dd78aa60  x17 00000075dd763dd0  x18 0000006efcfb4000  x19 0000000000006272
    x20 0000000000006c56  x21 00000000ffffffff  x22 0000000000000000  x23 0000000000006272
    x24 00000072860fdcb0  x25 00000072860fdcb0  x26 00000072860fdff8  x27 00000075e1e4b000
    x28 0000000000000000  x29 00000072860fd9a0
    lr  00000075dd70b898  sp  00000072860fd900  pc  00000075dd70b8c4  pst 0000000000001000
13 total frames
backtrace:
      #00 pc 00000000000a58c4  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 35647bdbfd4abaae505972042de0d304)
      #01 pc 0000000000090618  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::die()+8) (BuildId: 35647bdbfd4abaae505972042de0d304)
      #02 pc 0000000000091240  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::ScopedErrorReport::~ScopedErrorReport()+32) (BuildId: 35647bdbfd4abaae505972042de0d304)
      #03 pc 0000000000091764  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::reportInvalidChunkState(scudo::AllocatorAction, void*)+116) (BuildId: 35647bdbfd4abaae505972042de0d304)
      #04 pc 000000000009351c  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::Allocator<scudo::AndroidConfig, &(scudo_malloc_postinit)>::deallocate(void*, scudo::Chunk::Origin, unsigned long, unsigned long)+332) (BuildId: 35647bdbfd4abaae505972042de0d304)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末恳邀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灶轰,更是在濱河造成了極大的恐慌谣沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笋颤,死亡現(xiàn)場離奇詭異乳附,居然都是意外死亡,警方通過查閱死者的電腦和手機伴澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門赋除,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秉版,你說我怎么就攤上這事贤重。” “怎么了清焕?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵并蝗,是天一觀的道長祭犯。 經常有香客問我,道長滚停,這世上最難降的妖魔是什么沃粗? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮键畴,結果婚禮上最盅,老公的妹妹穿的比我還像新娘。我一直安慰自己起惕,他們只是感情好涡贱,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惹想,像睡著了一般问词。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘀粱,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天激挪,我揣著相機與錄音,去河邊找鬼锋叨。 笑死垄分,一個胖子當著我的面吹牛,可吹牛的內容都是我干的娃磺。 我是一名探鬼主播薄湿,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偷卧!你這毒婦竟也來了嘿般?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤涯冠,失蹤者是張志新(化名)和其女友劉穎炉奴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛇更,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瞻赶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了派任。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸逊。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掌逛,靈堂內的尸體忽然破棺而出师逸,到底是詐尸還是另有隱情,我是刑警寧澤豆混,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布篓像,位于F島的核電站动知,受9級特大地震影響,放射性物質發(fā)生泄漏员辩。R本人自食惡果不足惜盒粮,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奠滑。 院中可真熱鬧丹皱,春花似錦、人聲如沸宋税。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杰赛。三九已至爽室,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淆攻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工嘿架, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓶珊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓耸彪,卻偏偏與公主長得像伞芹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝉娜,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 夜鶯2517閱讀 127,720評論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月唱较,有人笑有人哭,有人歡樂有人憂愁召川,有人驚喜有人失落南缓,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53
  • 兔子雖然是枚小碩 但學校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,603評論 2 9
  • 信任包括信任自己和信任他人 很多時候,很多事情荧呐,失敗汉形、遺憾、錯過倍阐,源于不自信概疆,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,187評論 4 8