javabinder,失败的 BINDER 事务 - setImageViewBitmap(..) [重复]

Posted

技术标签:

【中文标题】javabinder,失败的 BINDER 事务 - setImageViewBitmap(..) [重复]【英文标题】:javabinder , FAILED BINDER TRANSACTION - setImageViewBitmap(..) [duplicate] 【发布时间】:2011-12-11 08:45:43 【问题描述】:

可能重复:failed binder transaction on widget update

每当我使用位图更新我的小部件 Imageview 时,Logcat 都会显示以下错误,

“Javabinder ,失败的 BINDER 事务”

我在互联网上搜索并了解这是由于内存问题。

我正在使用以下代码来更新 ImageView。

private void update(Context context) 
    Log.d("Configure", "updatestart");
    remoteViews.setImageViewBitmap(R.id.clockview,
            buildUpdate("CURRENTTIME", c));
    awm.updateAppWidget(awID, remoteViews);

还有 buildUpdate 函数:

public Bitmap buildUpdate(String time, Context context) 


    Log.d("ConfigureApp","Buildupdate_fn ---" + "start");
    date = new Date();
    sec = (float) date.getSeconds();
    min = (float) date.getMinutes();
    hour = (float) date.getHours() + min / 60.0f;

    bitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    Paint p = new Paint();
    p.setAntiAlias(true);
    p.setColor(0xFFFF0000);
    p.setStrokeWidth(2);
    canvas.drawLine(
            x,
            y,
            (float) (x + (r - 15)
                    * Math.cos(Math
                            .toRadians((hour / 12.0f * 360.0f) - 90f))),
            (float) (y + (r - 10)
                    * Math.sin(Math
                            .toRadians((hour / 12.0f * 360.0f) - 90f))), p);
    canvas.save();
    p.setColor(0xFF0000FF);
    canvas.drawLine(
            x,
            y,
            (float) (x + r
                    * Math.cos(Math.toRadians((min / 60.0f * 360.0f) - 90f))),
            (float) (y + r
                    * Math.sin(Math.toRadians((min / 60.0f * 360.0f) - 90f))),
            p);
    canvas.save();
    p.setColor(0xFFA2BC13);
    canvas.drawLine(
            x,
            y,
            (float) (x + (r + 10)
                    * Math.cos(Math.toRadians((sec / 60.0f * 360.0f) - 90f))),
            (float) (y + (r + 15)
                    * Math.sin(Math.toRadians((sec / 60.0f * 360.0f) - 90f))),
            p);

    remoteViews.setTextViewText(R.id.mycity, Float.toString(x));
    return bitmap;

请告诉我如何避免这个错误。:(有没有其他方法可以做到这一点?

提前致谢,

【问题讨论】:

【参考方案1】:

如果这是内存错误,则尝试重用位图,而不是在每次调用 buildUpdate() 时都创建新的。

另外,AFAIK,canvas.save() 仅在您实际调用 canvas.restore() 时才有用。

【讨论】:

从***.com/questions/7888890/…的帖子我了解到,我们可以将它保存在一个文件夹中,只需调用即可避免错误。但是该怎么做呢?

以上是关于javabinder,失败的 BINDER 事务 - setImageViewBitmap(..) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

android javabinder失败的活页夹事务

Android Binder原理ServiceManager中的Binder机制

Android中的Binder事务失败[重复]

失败的 Binder 事务文本文件

Binder-从Java层说起

如何获取 Binder 事务缓冲区的内容以进行故障排除