我创建了一个简单的ImageView
时钟小部件,显示每分钟创建一个Bitmap
。
小部件从实现BroadcastReceiver
的服务更新,以使用ACTION_TIME_TICK
获取时间更新。我没有找到其他解决方案。这是最好的吗?
几分钟后,如果我点击"SHOW CACHED PROCESSES"
(在settings / apps / running中),我的小部件将占用大约200 MB的内存,我不知道为什么。
有一种方法可以释放这段记忆吗?
这是小部件代码的一部分:
public class Widget_01_Clock extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Bitmap bmpClock = WidgetPaint.getClockBitmap(String textTime, 100, Color.White);
RemoteViews updateViews = new RemoteViews(context.getPackageName(),R.layout.w_01_clock);
updateViews.setImageViewBitmap(R.id.w_01_clock, bmpClock);
bmpClock.recycle();
}
}
制作时钟位图的代码
public Bitmap getClockBitmap(String textTime, float textSize, int textColor) {
Paint paint = new Paint();
paint.setTextSize(textSize);
paint.setColor(textColor);
paint.setTextAlign(Paint.Align.CENTER);
Typeface tf = Typeface.createFromAsset(c.getAssets(),typeface);
paint.setTypeface(tf);
int width = (int) (paint.measureText(text) + 0.5f); // round
float baseline = (int) (paint.ascent() + 0.5f);
int height = (int) (baseline + paint.descent() + 0.5f);
Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(image);
canvas.drawText(text, 0, baseline, paint);
return image;
}
非常感谢。