- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了很多关于这个问题的帖子,但我找不到适用于我的代码的帖子(或者至少我可以找到相关的帖子)。
我有一个可以横向和纵向显示的主屏幕小部件。如果我不断改变设备的方向,我会在我的 logcat 中得到这个:
03-08 10:41:35.793: ERROR/dalvikvm-heap(1159): 4707316-byte external allocation too large for this process.
03-08 10:41:35.793: ERROR/GraphicsJNI(1159): VM won't let us allocate 4707316 bytes
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): updateAppWidget couldn't find any view, using error view
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): android.view.InflateException: Binary XML file line #1: Error inflating class android.widget.LinearLayout
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.widget.RemoteViews.apply(RemoteViews.java:930)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:219)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:155)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.appwidget.AppWidgetHost.createView(AppWidgetHost.java:218)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.launcher2.Launcher.bindAppWidget(Launcher.java:2393)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.launcher2.LauncherModel$Loader$LoaderThread$7.run(LauncherModel.java:1051)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.launcher2.DeferredHandler$Impl.handleMessage(DeferredHandler.java:48)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.os.Looper.loop(Looper.java:123)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.app.ActivityThread.main(ActivityThread.java:4645)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at java.lang.reflect.Method.invoke(Method.java:521)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at dalvik.system.NativeStart.main(Native Method)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): Caused by: java.lang.reflect.InvocationTargetException
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.widget.LinearLayout.(LinearLayout.java:115)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at java.lang.reflect.Constructor.constructNative(Native Method)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): ... 19 more
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.Bitmap.nativeCreate(Native Method)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.content.res.Resources.loadDrawable(Resources.java:1718)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.View.(View.java:1885)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.View.(View.java:1834)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): at android.view.ViewGroup.(ViewGroup.java:285)
03-08 10:41:35.793: WARN/AppWidgetHostView(1159): ... 23 more
我的代码是这样的,它利用了 remoteViews:
public class WidgetLayoutBuilder {
public static final String DEG = "\u00B0";
public static final int LAYOUT_CURRENT = 1000;
public static final int LAYOUT_FORECAST = 1001;
/**
* Constructs current conditions layout.
*
* @param context
* @param wd
* @return
*/
public static RemoteViews buildCurrentLayout(Context context, int appWidgetId, ACCUWX_WeatherData wd){
Log.d("########", "remoteViews buildCurrentLayout");
// Return object
RemoteViews toRet = new RemoteViews(context.getPackageName(), R.layout.widget_current_layout);
String cityText = wd.getCityName();
String tempUnits = wd.getMetric() == 0 ? "F" : "C";
String iconId = "icon_" + wd.getCurrentIconCode();
// Populate views with weather data
toRet.setTextViewText (R.id.current_location_text, cityText);
toRet.setTextViewText (R.id.current_temp_text, wd.getCurrentTemperature() + DEG + tempUnits);
toRet.setTextViewText (R.id.current_conditions_text, wd.getCurrentConditions());
toRet.setImageViewResource (R.id.current_condition_image, ACCUWX.getDrawableId(iconId));
toRet.setTextViewText (R.id.current_hi_temp, context.getString(R.string.hi) + ": " + wd.getForecast().get(0).getDailyHigh() + DEG);
toRet.setTextViewText (R.id.current_lo_temp, context.getString(R.string.lo) +": " + wd.getForecast().get(0).getDailyLow() + DEG);
// Make alert icon visible if necessary.
int visibility = wd.getAlertIsActive() == 0 ? View.INVISIBLE : View.VISIBLE;
toRet.setViewVisibility(R.id.alert_icon, visibility);
if (MainActivity.mLocations == null)
MainActivity.mLocations = new ArrayList<String>();
if (MainActivity.mLocName == null)
MainActivity.mLocName = new String("");
if (!MainActivity.mLocations.contains(wd.getZipCode()) || !MainActivity.mLocName.contains(wd.getCityName()))
MainActivity.mLocations.add(wd.getZipCode());
MainActivity.isFromLocationSearchActivity = false;
// Launch SimpleWeather application intent
Intent intentAppLaunch = new Intent(context, MainActivity.class);
intentAppLaunch.putExtra(ACCUWX.Extras.LOCATION_CODE, wd.getZipCode());
intentAppLaunch.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingAppLaunch = PendingIntent.getActivity(context, appWidgetId, intentAppLaunch, PendingIntent.FLAG_CANCEL_CURRENT);
toRet.setOnClickPendingIntent(R.id.current_layout, pendingAppLaunch);
return toRet;
}
/**
* Returns pretty names for display purposes in the form 'city name, state name' for the US and 'cityname, countryname (region)' for other countries.
* @return
*/
public static String getPrettyName(ACCUWX_WeatherData wd){
String prettyName = "null";
String state = wd.getStateName();
String city = wd.getCityName();
String country = wd.getCountryName();
String countryCode = wd.getCountryCode();
if (countryCode.equalsIgnoreCase("us"))
prettyName = city + ", " + state;
else
prettyName = city + ", " + country + " (" + state + ")";
return prettyName;
}
/**
* Constructs deleted layout.
*
* @param context
* @return
*/
public static RemoteViews buildDeletedLayout(Context context){
Log.d("########", "remoteViews buildDeletedLayout");
return new RemoteViews(context.getPackageName(), R.layout.widget_deleted_layout);
}
}
位图错误是否来自设备本身而不是我的应用程序的问题?
非常感谢任何帮助或指导!
最佳答案
bitmap size exceeds VM budget
这只是内存泄漏的一般错误。在真实设备中使用 DDMS 或各种免费应用程序监控您的内存使用情况,您会看到您的内存使用量一直在上升,直到它爆炸(对我来说大约是 28MB)。
您有内存泄漏,只有您拥有所有源代码才能找到它。查找已加载但未释放的位图以及已加载但未关闭的游标。
关于android - 位图大小超出 VM 预算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725066/
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 9 年前。 Improve
我正在尝试部署包含 Azure 预算的 ARM 模板。目前我正在使用 Azure CLI,但也可以通过门户进行。 az deployment group create --resource-group
我正在尝试部署包含 Azure 预算的 ARM 模板。目前我正在使用 Azure CLI,但也可以通过门户进行。 az deployment group create --resource-group
我正在将我的图像传递到 xml,通过使用以下方法调整我的图像大小: scaled = Bitmap.createScaledBitmap(bp, h, w, true); imgV.setIm
我设计了一个自定义 ImageView 库,在我的三星 Galaxy S3 上运行起来非常棒,但是当我尝试让它在我的 HTC Wildfire S 上运行时,它会抛出一个 java.lang.OutO
我已经阅读了关于这个问题的那些帖子,但我的情况有点不同,因为我没有显示位图,而是只是对原始数据的图像进行后处理。首先,我调用 ImageProcessing.rgbToBitmap(data,widt
我已经阅读了很多关于这个问题的帖子,但我找不到适用于我的代码的帖子(或者至少我可以找到相关的帖子)。 我有一个可以横向和纵向显示的主屏幕小部件。如果我不断改变设备的方向,我会在我的 logcat 中得
我在 BitmapFactory 中遇到异常。我读过其他问题,唯一的解决方案是加载我的图像的缩小版本,但在我的情况下,我需要以全分辨率显示它们并带有缩放系统(图像是包含文本的传单) . 300ko 的
在我的应用程序中,用户选择图像,程序允许用户对图像进行更改。由于那里有很多不同的 android 设备,我的程序在一些堆大小较小的设备上崩溃。我想计算最适合用户手机的尺寸,这样它就不会因为 VM 预算
我已经为我的向上和向下按钮寻找了很多解决方案,但似乎没有任何效果。在程序中使用 ImageButton 时,我可以在出现 OutOfMemoryError 之前按三个 ImageButton。请提供任
我浏览了很多与此错误相关的帖子,但没有找到适合我的问题的解决方案。在我的项目中有三个 Activity ..在每个 Activity 中有 4 个我正在使用序列的动画。在单击以更改我的 Activit
我想知道是否有人对旨在缓存尽可能多的动态发现的图像的架构有任何经验。 在我的情况下,我为从 ListView 单击的每个项目请求一个位图。这些位图是通过网络接收的(就处理或网络 I/O 而言,这不是一
我到处寻找“位图大小超出 VM 预算”的问题,但似乎没有一个解决方案适用于我。我不明白为什么我的程序有时会抛出这个错误,因为我使用它的方式似乎不会导致任何可能的内存泄漏。我的堆栈跟踪指向 Bitmap
我有这个函数可以从 SD 加载一个大位图并旋转它。 但在第二次或第三次旋转后,我得到一个位图大小超出 VM 预算错误。 有什么想法吗?我确实回收旧位图,不是吗? public void next(St
我有一个应用程序,我在其中读取了一些 gps 数据并将它们显示在 map 上,我还在那个位置添加了一个叠加层,这是一个小的 .png 图像。 我在 Async Task 线程和 onProgressU
尝试通过 Powreshell API (New-AzureRmConspirationBudget) 创建 azure 预算。当从 Azure 运行此命令时,将创建用户上下文预算并发出警报。当从 A
有什么方法可以找到位图的虚拟机预算吗? 我的应用程序一次显示两张照片,如果适当的缩放和颜色深度,这是可能的,但是,如果设备有更大的虚拟机预算(就像某些设备一样),我希望应用程序使用它来获得更好的图像质
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: bitmap size exceeds Vm budget error android 我开发了一个android示
我猜我有内存泄漏。我有一个使用相机的列表 Activity ......现在只处理拍照......但我想一些列表膨胀会导致一些内存泄漏......我想我错过了一些资源释放(猜测图像......) 我找
发布了我的问题 here too. 一个初学者..我正在做一个学校 map 应用程序。 首先,我的背景有 4 个按钮(level3、level4、level5、level6)。 我尝试点击所有的按钮,
我是一名优秀的程序员,十分优秀!