android javabinder失败的活页夹事务

Posted

技术标签:

【中文标题】android javabinder失败的活页夹事务【英文标题】:android javabinder failed binder transaction 【发布时间】:2012-04-15 10:21:48 【问题描述】:

尝试获得我的第一个 android 小部件,让我告诉你从 Visual Studio Pro 迁移到 eclipse不是一件顺利的事情! 无论如何,我遇到了上述错误,这给我解决了一些麻烦。我搜索了所有可能的重复项,似乎当应用达到 IPC 大小(即大图像)时会发生此错误

我的小部件启动了一个意图服务来从网络上下载一些信息和一张图片。 png的原始图像大小约为100k。然而,在我更新小部件之前,我缩小到 17k 左右。 (检查内存跟踪器大小为 16400bytes[])。 但更新失败。如果我删除图像,则更新成功。

这是被执行的widgetprovider中的监听器:

public void onHttpLoaded(Bitmap image, String titlestring, String subtitlestring)
    
        Context context = getApplicationContext();          

        if (image == null) //no data?
        
            Toast.makeText(context, context.getResources().getString(R.string.null_data_toast), Toast.LENGTH_LONG);
            return;// exit!
        

        try
        
            RemoteViews widgetView = new RemoteViews(this.getPackageName(), R.layout.main);             
            widgetView.setTextViewText(R.id.title, titlestring);

            //all other comment out

            //The problem!
            widgetView.setImageViewBitmap(R.id.main_icon, image);

            //Get global  appwidgetmanager
            AppWidgetManager manager = AppWidgetManager.getInstance(this);

            //update widget
            manager.updateAppWidget(Constants.THIS_APPWIDGET, widgetView);
        
        catch (Exception e)
        
            Log.d("onHttpLoaded", e.toString());
        

    

以及我的服务中调用上述代码的 onHandleIntent:

protected void onHandleIntent(Intent intent)
    
        resources = getApplicationContext().getResources();
        int iAppWidgetId;           
        try
        
            iAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        
        catch (Exception e)
        
            Log.d("Service", "WidgetID not found");
        
        //comment out stuff...

        //launch new httpTask 
        httpTask myhttpTask = new httpTask(tittlestring, subtitlestring, (myHttpListener) MyUpdateService.this, MyUpdateService.this);
        //limit size of bitmap
        myhttpTask.setSampleSize(Constants.BITMAP_SAMPLE_SIZE); //size = 4
        myhttpTask.execute();

    

所有测试都在模拟器中完成。 可能很重要的一个细节是,在 logcat 中,我收到 20-30 条失败消息“!!!活页夹事务失败!!!” 关于我是如何搞砸的有什么想法吗? 谢谢!

【问题讨论】:

【参考方案1】:

解决了。这是模拟器的内存问题。

【讨论】:

以上是关于android javabinder失败的活页夹事务的主要内容,如果未能解决你的问题,请参考以下文章

将位图动态放入小部件时失败的活页夹事务

Android - 活页夹

当服务器向客户端发送消息时,android本机活页夹崩溃

安卓活页夹驱动

如何通过活页夹将服务发送到 API 级别 14 的片段?

Android Binder原理ServiceManager中的Binder机制