App运行,logcat日志不断输出purging 191k from font cache这样的消息
解决方案 »
- 我要周期性的执行一个任务,执行频率为100us,怎样实现?
- 问下overlay系统几个类名字的含义
- Android如何加载一个现成的动态库
- 应用程序在后台运行,怎样实现再次置顶显示出来?
- ExpandableListView里给child的每个item添加了ImageView。如何对imageview设置监听!
- android 后台service摄像拍照功能
- 如何实现多个TextView中的内容依次显示?
- 各位大神,我是想实现一个拨号功能,但是代码没有错,却不能拨号,这是LogCat里面的代码,我看不懂
- android 评论功能如何实现
- Android Studio 界面设计和运行的不一样
- 在NDK层用SKIA出现了看不懂的LOG消息----no context for glyph 0,不知道什么意思?!
- Android实现Ad_hoc
purging 191k from font cache [26 entries]
purging 191k from font cache [26 entries]
purging 191k from font cache [26 entries]
process com.android.deskclock(pid 1046) has died.
---no context for glyph 0存在内存泄漏吗?把系统的进程com.android.deskclock都杀死了!!!
最怕的就是---no context for glyph 0这个了,输出这个后整个APP就全黑了。但重新运行一切又OK了,看来也不是内存不够啊!
Skia API的简单应用----http://blog.csdn.net/cuiyan0214/article/details/5964739 e) 例程 i )画点、线、圆、文字 #include "SkBitmap.h" #include "SkDevice.h" #include "SkPaint.h" #include "SkRect.h" #include "SkImageEncoder.h" #include "SkTypeface.h"
using namespace std;
int main() { SkBitmap bitmap; bitmap.setConfig(SkBitmap::kARGB_8888_Config,320,240); bitmap.allocPixels(); SkCanvas canvas(new SkDevice(bitmap)); SkPaint paint; // draw points with red. paint.setARGB(255, 255, 0, 0); paint.setStrokeWidth(4); canvas.drawPoint(40,30, paint); canvas.drawPoint(80,60, paint); canvas.drawPoint(120,90, paint); //draw a line with green. paint.setARGB(255, 0, 255, 0); paint.setStrokeWidth(4); canvas.drawLine(160,10,320,110,paint); //draw a circle with bule. paint.setARGB(255, 0, 0, 255); canvas.drawCircle(80,180,50,paint); //draw text with red SkTypeface *font = SkTypeface::CreateFromFile("simkai.ttf"); if ( font ) { paint.setARGB(255, 255, 0, 0); paint.setTypeface( font ); paint.setTextSize(24); canvas.drawText("HELLO!:)", 8, 200, 180, paint); } SkImageEncoder::EncodeFile("snapshot.png", bitmap,SkImageEncoder::kPNG_Type,100); return 0; } 不知道这里的SkTypeface *font 对像要这么释放,因为跟FONT有关的就是这个对象了。
难道是因为SkTypeface *font = SkTypeface::CreateFromFile("simkai.ttf"); 这样的创建函数进行了多次创建的原因?难道要整成全局的并只创建一次?!
was doing now that was causing this to appear in the logs so much. I was
puzzled because I wasn't using many styles or colors, the same font, same
color. I turned off alpha blending, and removed all the items I was drawing
until I was left with 1, and it was still overloading the cache. I narrowed
it down to doing:
canvas.save();
canvas.rotate(rotationAngle, p.x, p.y); // this is the offending line
canvas.drawText(text, p.x, p.y, paint);
canvas.restore();
If I rotate and then draw text (this is an AR type implementation where the
text is rotating with the phone), this is where the font cache fills up,
with just 1 static piece of text. Commenting out the above line doesn't.
Even with a large number of text items, NOT rotating the canvas before
drawing the text, doesn't fill the cache.
This seems kind of strange to me that this would fill the cache, but, is
there another way to do this to not fill the cache?
On Mon, Jun 20, 2011 at 7:43 PM, Dianne Hackborn <[email protected]>wrote: > Well having it printed every second or so indicates you are pretty severely
> thrashing the cache, which can certainly impact performance. For example
> drawing your UI may not be fitting in the cache so each frame you draw
> requires re-rendering glyphs back in to the cache. If that is the case,
> look at doing things like reducing the number of distinct font sizes or
> families/styles you are using to have less impact on the cache.
--
Adam Ratana
[email protected]