У меня есть виджет в моем приложении, у которого есть ImageView для отображения холста.Android Widget Canvas - java.lang.IllegalArgumentException
Если я смотрю в мой Пользователь вылетает я вижу эту ошибку очень часто (но всегда только на нескольких устройствах):
java.lang.RuntimeException: Unable to start receiver my.package.name.WidgetProvider: java.lang.IllegalArgumentException: RemoteViews for widget update exceeds maximum bitmap memory usage (used: 5715000, max: 5529600 /*these arent always the same :)*/) The total memory cannot exceed that required to fill the device's screen once.
мой холст имеет динамический размер, он автоматически изменяет размер, когда пользователь изменяет размер и имеет заданное соотношение сторон, то создается так:
Resources r = context.getResources();
SharedPreferences widgets = context.getSharedPreferences("widgets", 0);
//these are stored in onAppWidgetOptionsChanged when user resizes his widget
int w = widgets.getInt(widgetId + "_width", 130);
int h = widgets.getInt(widgetId + "_height", 160);
w = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, w,
r.getDisplayMetrics());
h = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, h,
r.getDisplayMetrics());
float scaleX = (float) w/(float) 13;
float scaleY = (float) h/(float) 16;
float scale = 1.5f * (scaleX < scaleY ? scaleX : scaleY);//i multiplied it with 1.5 because the canvas was very unsharp
w = (int) (13 * scale);
h = (int) (16 * scale);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget);
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bmp);
[...]
remoteViews.setImageViewBitmap(R.id.widget, bmp);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
я думаю, это потому, что холст 1.5x больше виджета, но еще очень нечеткие.
Что я могу сделать?
Заранее спасибо.
Метин Капуста