ImageView
1分ごとに作成されたものを表示するシンプルな時計ウィジェットを作成しましたBitmap
。
ウィジェットは、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;
}
どうもありがとう。