android javabinder活页夹事务失败

时间:2012-04-15 10:21:48

标签: java android

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

我的小部件启动了一个intentservice来从网上下载一些信息和一个图像。 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个失败消息“!!! failed binder transaction !!!” 关于我如何搞砸了这个想法? thnks!

1 个答案:

答案 0 :(得分:1)

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