1

我创建了一个简单的时钟小部件,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;
}

非常感谢。

4

0 回答 0