也許我正在嘗試做一些我不該做的事情。操縱256x256位圖崩潰android-ndk的JNI
我在模擬器中運行一段代碼。它看起來(或多或少) 是這樣的:http://pastie.org/1291380
這是構建一個動態壁紙背景。我傳入位圖, 調色板和平鋪陣列。我的位圖大小爲256 x 256. getRedPal/getGreenPal/getBluePal本質上會調用 Color.red()/ Color.green()/ Color。藍()以獲得調色板對象的顏色組件。
循環突然出現;在模擬器崩潰和燒燬之前,我得到一直到drawInC的j值 命中32的點:
11-11 15:34:44.032:INFO/distort_bmp(598):DrawInC:i:0 Y:32
11-11 15:34:44.032:INFO/distort_bmp(598):DrawTiles:I:0 Y:0
11-11 15:34:44.032:INFO/distort_bmp(598) :DrawTiles:I:0 Y:1
11-11 15:34:44.032:INFO/distort_bmp(598):DrawTiles:I:0 Y:2
11-11 15:34:44.032:INFO/distort_bmp(598):DrawTiles:i:0 j:3
11-11 15:34:44.032:INFO/distort_bmp(598):DrawTiles:i:0 j:4
之後我得到一個轉儲文件發送到/ data/tombstones。這裏是 轉儲(但我真心不覺得它什麼值得任何價值,只是 一堆內存地址):http://pastie.org/1291394
我添加機器人:vmSafeMode =「true」以我的標籤 閱讀後別處那可以解決問題。這是2.2, 使用bitmap.h。
個人而言,我半信半疑那
jbyte* buffer =
(*env)->GetByteArrayElements(env, arr, &isCopy)
通話;我從網上撥了那個 的代碼,因爲我完全無法從我的字節數組「arr」獲取值 。
任何想法?
編輯 操縱我的循環迭代之後(我縮短了循環的數量),我現在得到的信息的錯誤:
「ReferenceTable溢出(最大值= 512)」
JNI local reference table summary (512 entries):
509 of Ljava/lang/Class; 164B (3 unique)
2 of Ljava/lang/String; 28B (2 unique)
1 of [Ljava/lang/String; 28B
Memory held directly by tracked refs is 576 bytes
Failed adding to JNI local ref table (has 512 entries)
那「java.lang.class的509」看起來不太適合我......我如何在這裏優化我的代碼?
我沒有花時間閱讀所有的代碼,但一些谷歌搜索顯示,你得到的錯誤可能是由於沒有釋放變量造成的...... http://代碼.google.com/p/android/issues/detail?id = 8676#c5不知道是否有任何幫助(是的,這是關於blutooth,但它不是一個BT問題) – Basic 2010-11-12 22:09:33