为什么我的时钟小部件在CACHED PROCESSES中占用了大量内存?我怎么解决?

时间:2013-03-15 17:40:51

标签: android process widget memcached

我创建了一个简单的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;
}

非常感谢。

0 个答案:

没有答案