我创建了一个简单的时钟小部件,ImageView
它显示Bitmap
每分钟创建一个。
小部件从实现 a 的服务更新,BroadcastReceiver
以使用ACTION_TIME_TICK
. 我没有找到其他解决方案。这是最好的吗?
几分钟后,如果我点击"SHOW CACHED PROCESSES"
(在设置/应用程序/运行中),我的小部件将占用大约 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;
}
非常感谢。