发布未知位参考 [英] Released unknown bitmap reference

查看:124
本文介绍了发布未知位参考的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想设定在谷歌地图V2标记的图标。 我下载了网络的一些图像和改变其在code背景。在那之后,我将它们设置为图标标记。在地图上的首创,它工作正常,但旋转之后有一个例外。

Android版本我运行此上:4.3

我的code是如下:

  UrlImageViewHelper.loadUrlDrawable(TuvaletlerMapActivity.this,
                iconUrl,新UrlImageViewCallback(){

                    @覆盖
                    公共无效onLoaded(ImageView的四,位图BM,
                            字符串ARG2,布尔ARG3){
                        点阵位图= VenuesHelper.iconizeBitmap(BM);
                        marker.setIcon(BitmapDesc​​riptorFactory
                                .fromBitmap(位图));
                    }
                });
 

VenuesHelper.iconizeBitmap()如下:

 公共静态位图iconizeBitmap(位图BM){
    点阵位图= Bitmap.createBitmap(bm.getWidth(),bm.getHeight()
            bm.getConfig());
    帆布油画=新的Canvas(位);
    canvas.drawColor(Color.parseColor(#33B5E5));
    canvas.drawBitmap(BM,0,0,NULL);
    返回的位图;
}
 

堆栈跟踪如下:

  10月8号至7日:16:50.684:E / AndroidRuntime(19001):致命异常:主要
10月8日至7日:16:50.684:E / AndroidRuntime(19001):java.lang.IllegalArgumentException:如果发行未知位图的参考
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在maps.as.ia(来源不明)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在maps.ah.ob(来源不明)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在maps.ah.bn.a(来源不明)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在bix.onTransact(的SourceFile:204)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.Binder.transact(Binder.java:347)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.google.android.gms.internal.dm $ A $ AF(来源不明)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.google.android.gms.maps.model.Marker.setIcon(来源不明)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.behlul.tuvaletbul.TuvaletlerMapActivity$TuvaletliYukleCallbacks$1.onLoaded(TuvaletlerMapActivity.java:250)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.koushikdutta.urlimageviewhelper.UrlImageViewHelper $ 2.运行(UrlImageViewHelper.java:615)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.koushikdutta.urlimageviewhelper.UrlImageViewHelper $ 3.onPostExecute(UrlImageViewHelper.java:653)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.koushikdutta.urlimageviewhelper.UrlImageViewHelper $ 3.onPostExecute(UrlImageViewHelper.java:1)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.AsyncTask.finish(AsyncTask.java:631)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.Handler.dispatchMessage(Handler.java:99)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.os.Looper.loop(Looper.java:137)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在android.app.ActivityThread.main(ActivityThread.java:5103)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在java.lang.reflect.Method.invokeNative(本机方法)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在java.lang.reflect.Method.invoke(Method.java:525)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10月8日至7日:16:50.684:E / AndroidRuntime(19001):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

找到了解决办法。我检查,如果该位图驻留在缓存中重装过,但我忘了检查缓存命中。现在我修改了code和它不再崩溃。我无法找出飞机坠毁的确切原因强硬,可能是一些愚蠢的垃圾收集问题。

下面是修改code这不再崩溃:

 位图图标= UrlImageViewHelper.getCachedBitmap(iconUrl);
        如果(图标!= NULL){
            marker.setIcon(BitmapDesc​​riptorFactory
                    .fromBitmap(VenuesHelper.iconizeBitmap(图标)));
        }其他{//添加这个东西
            UrlImageViewHelper.loadUrlDrawable(
                    TuvaletlerMapActivity.this,iconUrl,
                    新UrlImageViewCallback(){

                        @覆盖
                        公共无效onLoaded(ImageView的四,位图BM,
                                字符串ARG2,布尔ARG3){
                            点阵位图= VenuesHelper
                                    .iconizeBitmap(BM);
                            marker.setIcon(BitmapDesc​​riptorFactory
                                    .fromBitmap(位图));
                        }
                    });
        }
 

I'm trying to set icon of a Marker in Google Maps v2. I'm downloading some images over network and change their background in code. After that I'm setting them as icons to markers. At first creation of the map it works fine but after rotation there is an exception.

Android version I run this on: 4.3

My code is as follows:

        UrlImageViewHelper.loadUrlDrawable(TuvaletlerMapActivity.this,
                iconUrl, new UrlImageViewCallback() {

                    @Override
                    public void onLoaded(ImageView iv, Bitmap bm,
                            String arg2, boolean arg3) {
                        Bitmap bitmap = VenuesHelper.iconizeBitmap(bm);
                        marker.setIcon(BitmapDescriptorFactory
                                .fromBitmap(bitmap));
                    }
                });

and VenuesHelper.iconizeBitmap() is as follows:

public static Bitmap iconizeBitmap(Bitmap bm) {
    Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),
            bm.getConfig());
    Canvas canvas = new Canvas(bitmap);
    canvas.drawColor(Color.parseColor("#33B5E5"));
    canvas.drawBitmap(bm, 0, 0, null);
    return bitmap;
}

Stack trace is as follows:

08-07 10:16:50.684: E/AndroidRuntime(19001): FATAL EXCEPTION: main
08-07 10:16:50.684: E/AndroidRuntime(19001): java.lang.IllegalArgumentException: Released unknown bitmap reference
08-07 10:16:50.684: E/AndroidRuntime(19001):    at maps.as.i.a(Unknown Source)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at maps.ah.o.b(Unknown Source)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at maps.ah.bn.a(Unknown Source)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at bix.onTransact(SourceFile:204)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.Binder.transact(Binder.java:347)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.google.android.gms.internal.dm$a$a.f(Unknown Source)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.google.android.gms.maps.model.Marker.setIcon(Unknown Source)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.behlul.tuvaletbul.TuvaletlerMapActivity$TuvaletliYukleCallbacks$1.onLoaded(TuvaletlerMapActivity.java:250)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$2.run(UrlImageViewHelper.java:615)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.onPostExecute(UrlImageViewHelper.java:653)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.onPostExecute(UrlImageViewHelper.java:1)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.AsyncTask.finish(AsyncTask.java:631)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.os.Looper.loop(Looper.java:137)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at android.app.ActivityThread.main(ActivityThread.java:5103)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at java.lang.reflect.Method.invokeNative(Native Method)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at java.lang.reflect.Method.invoke(Method.java:525)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-07 10:16:50.684: E/AndroidRuntime(19001):    at dalvik.system.NativeStart.main(Native Method)

解决方案

Found the solution. I was checking if the bitmap resides in the cache before reloading it, but I had forgotten to check for cache hit. Now I modified the code and it no longer crashes. I couldn't figure out the exact reason of the crash tough, probably some silly garbage-collection issues.

Here is the modified code which no longer crashes:

        Bitmap icon = UrlImageViewHelper.getCachedBitmap(iconUrl);
        if (icon != null) {
            marker.setIcon(BitmapDescriptorFactory
                    .fromBitmap(VenuesHelper.iconizeBitmap(icon)));
        } else { //Added this else
            UrlImageViewHelper.loadUrlDrawable(
                    TuvaletlerMapActivity.this, iconUrl,
                    new UrlImageViewCallback() {

                        @Override
                        public void onLoaded(ImageView iv, Bitmap bm,
                                String arg2, boolean arg3) {
                            Bitmap bitmap = VenuesHelper
                                    .iconizeBitmap(bm);
                            marker.setIcon(BitmapDescriptorFactory
                                    .fromBitmap(bitmap));
                        }
                    });
        }

这篇关于发布未知位参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆