所以,我在aplite中显示位图时遇到问题,而不是玄武岩。是的,我知道这与内存量有关,但是当我查看heap_bytes_free并考虑内存碎片时,我仍然看不出问题所在。
下面,我展示了日志中的一些代码和一些调试输出,在第二种情况下,似乎抓住了过多的内存来显示我的位图。
我正在显示两个类似大小的位图。第一个是compassWindow.png,它只使用3K的aplite和6k的玄武岩。第二个,decimalBackground.png在玄武岩中使用22k(是22,560字节!)并且无法在aplite中创建。
在aplite中运行时,我没有收到任何错误消息。位图无法显示。那么发生了什么?
以下是在两个平台上运行相同代码的日志pebble original(aplite)和pebble Time(玄武岩)
SDK 4.0.1 Windoows 10下的Ubuntu VirtualBox。应用3.8.1-942-b60f188,观看v3.8.2(OG和时间) 这是代码。我在gbitmap_create_with_resource命令之前和之后放了一个APP_LOG。 a)罗盘位图
bitmap_layer = bitmap_layer_create(GRect(0, 0, 144,168));
APP_LOG(APP_LOG_LEVEL_DEBUG, "COMPASS Free: %d ", heap_bytes_free());
gBitMap = gbitmap_create_with_resource(RESOURCE_ID_COMPASS);
APP_LOG(APP_LOG_LEVEL_DEBUG, "COMPASS %d Free: %d ", (int) gBitMap, heap_bytes_free());
bitmap_layer_set_bitmap (bitmap_layer, gBitMap );
b)decimalBackground位图
bitmap_layer = bitmap_layer_create(GRect(0, 0, 144,300));
APP_LOG(APP_LOG_LEVEL_DEBUG, "decimalBackground Free: %d ", heap_bytes_free());
gBitMap = gbitmap_create_with_resource(RESOURCE_ID_DECIMALBACKGROUND);
APP_LOG(APP_LOG_LEVEL_DEBUG, "decimalBackground %d Free: %d ", (int) gBitMap, heap_bytes_free());
bitmap_layer_set_bitmap (bitmap_layer, gBitMap);
以下是appinfo.json中的资源定义。您会注意到我正在使用新的统一“位图”类型。
"media": [
{
"type": "bitmap",
"name": "COMPASS",
"file": "images/compassWindow.png"
},
{
"type": "bitmap",
"name": "DECIMALBACKGROUND",
"file": "images/decimalBackground.png"
},
这是输出: 玄武岩:
[10:54:44] wind_dir.c:101> COMPASS Free: 45928
[10:54:44] wind_dir.c:103> COMPASS 537019168 Free: 39664
[10:54:44] msg_handler.c:46> current window: startWind
13 seconds later
[10:54:57] javascript> raceQs V0.81:294 Current Window: performance
[10:54:57] position.c:171> decimalBackground Free: 46132
[10:54:57] position.c:173> decimalBackground 537019212 Free: 23572
注意:在10:54:44,自由字节从45928变为39644 - 相差6264
在10:54:57,它们从46132变为23572 - 相差22,560。 2. aplite:
[10:47:13] wind_dir.c:101> COMPASS Free: 4856
[10:47:14] wind_dir.c:103> COMPASS 536994972 Free: 1776
[10:47:20] position.c:171> decimalBackground Free: 5060
[10:47:20] position.c:173> decimalBackground 0 Free: 5060
在10:47:14,自由字节从4865到1776 - 相差3080。 在10:47:20,bytes_free不会改变,因为gbitmap_create_with_resource(RESOURCE_ID_DECIMALBACKGROUND);失败。 这是图像。,文件大小:
-rwxrwx--- 1 alan alan 2772 Oct 14 11:55 compassWindow.png
-rwxrwx--- 1 alan alan 1637 Jan 18 16:02 decimalBackground.png
答案 0 :(得分:0)
问题可能在于您尝试在该位图图层中设置太大的图像。对于一个大的水平图像,我遇到了类似的aplite问题。我注意到如果bitmap_layer比屏幕大,它就不会出现。我认为它可以有点大,但可以定义为不是双倍高度或类似的东西。
我所做的是在2中砍掉我的图像,并在需要时将其换成另一张。