尝试获取我的第一个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!
答案 0 :(得分:1)
解决。这是模拟器的内存问题。