既然crash了,java層沒有明顯致命報錯,那么一定是在native層。 native報錯相當不明顯。
看了下,這個大圖有 > 10000 x 20000的像素,占用空間 > 17M.
寫了demo,發(fā)現(xiàn)BitmapFactory.decodeFile(filePath,tmpOptions)正常,而在項目里BitmapFactory.decodeFile(filePath,options); 此處開始報錯的.當然,這么大的圖,在手機相冊,微博等其他應用上也是crash,微信相冊沒有crash,但是給了個黑屏。
原來是老項目 targetSdkVersion才24,現(xiàn)在新項目普遍都用新的29了,所以小demo里正常,手機相冊,微博等這些大型的 "老項目",即使升級,也不敢輕易升級targetSdkVersion版本。
根本原因是,API28以后,bitmap對象解碼,放在native層,由C申請/釋放內(nèi)存,對大圖的兼容性,比java不知高到哪里去了。別處看過那個代碼,暫時沒找到,先記錄下這個事情。都過去了一個月了。