1.問題描述
乙個雪花效果,在android4.0以下系統正常執行,但是在android4.1上異常退出。
2.問題定位
看一段**
private bitmap mflakeimage = null;
private bitmap mflakeimagetemp = null;
mflakeimagetemp = bitmapfactory.decoderesource(resources, r.drawable.snow_1);
mflakeimage = bitmap.createscaledbitmap(this.mflakeimagetemp, mflakeimagetemp.getwidth(),
mflakeimagetemp.getheight(), true);
log.d("cjp", "mflakeimagetemp=" + mflakeimagetemp);
log.d("cjp", "mflakeimage=" + mflakeimage);
this.mflakeimagetemp.recycle();
log.d("cjp", "mflakeimage.isrecycled()=" + mflakeimage.isrecycled());
上面是一段簡化後的**,用於說明問題就行了:即從一張bitmap,利用createscaledbitmap得到其另一張縮放的bitmap,
但是其實並沒有縮放!
上段**在android4.0以下版本,mflakeimagetemp和mflakeimage是不同的兩張圖,但是在android4.1上卻是一張圖
。log如下:
4.0:
d/cjp (21170): mflakeimagetemp=android.graphics.bitmap@41cf0d28
d/cjp (21170): mflakeimage=android.graphics.bitmap@41cf32f0
d/cjp (21170): mflakeimage.isrecycled()=false
4.1:
d/cjp (11448): mflakeimagetemp=android.graphics.bitmap@4179c850
d/cjp (11448): mflakeimage=android.graphics.bitmap@4179c850
d/cjp (11448): mflakeimage.isrecycled()=true
所以,在4.1版本上,繼續對已經**的mflakeimage繪製雪花,就會導致異常退出
3. 為何有上述**?
有人會問,既然沒有任何縮放,為何先從一張圖createscaledbitmap,然後把原圖**,這不等於繞了一圈回到原地?
沒錯。不過上述這份**只是示意**,原來的雪花效果,功能比較完善,封裝比較好。它可以用一片雪花,通過設定scale、alpha、rotate等引數設定,通過隨機數,實現以假亂真的效果。
不過,由於我做這個的時候,設計師切了大小不同的圖,就沒必要進行縮放,所以我把scale簡單設定為1,而且我除錯用的手機又是4.0的,所以這個問題就沒有發現。
4.總結
android sdk的每一次公升級,都有一些變化(優化),當我們不清楚知道這些變化的時候,盡量審視下自己的**,是不是會出現這種優化之後的問題。
ubuntu下安裝不同版本nginx
安裝前先開啟網頁 nginx官網安裝說明頁 一.開啟 etc apt sources.list檔案,且末尾處新增兩行內容 從上面開啟網頁找到下圖紅色圈起來的兩行內容複製到 etc apt sources.list檔案末尾,先別儲存,往下看 將藍色標記的 codename 替換掉,看下圖,用cat e...
android 安裝apk對不同版本的要求
android手機越往後,對許可權的要求越來越高 其中安裝apk就是這樣.以下說下在android7.0手機上安裝apk的具體操作 第一步 在res資源檔案下,新建xml資料夾,xml資料夾下命名file paths資源檔案,其寫法如下 name 可以自定義 xmlns android name d...
在不同版本python下安裝tensorflow
note 這樣在不同的環境下切換安裝看起來很煩,的確煩,但是在conda環境下安裝,省去了安裝scipy,numpy 有些不太好安裝的科學計算庫,剛才我們的tensorflow就是裝在conda3下的python3.5下,那樣我們可以很方便地使用conda的庫 官網上的安裝tensorflow是pi...