旋转位图导致Android小部件中的TransactionTooLargeException

时间:2014-03-04 14:10:37

标签: android bitmap widget

我正在用秒针创建一个analogClock小部件。我使用alarmManager每秒更新我的小部件。

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);

    if (updateIntent == null) {
        Intent update = new Intent(context, UpdateService.class);
        updateIntent = PendingIntent.getService(context, 0, update, PendingIntent.FLAG_CANCEL_CURRENT);
    }

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 1000, updateIntent);
}

我的UpdateService更新时钟的当前位置。 在onCreate方法中,我加载位图

hourBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.hour);
minuteBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.minute);
secondBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.second);
onStartCommand中的

我updatePositions

Bitmap hourClockBitmap = getRotatedClock(hourBitmap, getHourAngle());
remoteViews.setImageViewBitmap(R.id.hour, hourClockBitmap);

Bitmap minuteClockBitmap = getRotatedClock(minuteBitmap, getMinuteAngle());
remoteViews.setImageViewBitmap(R.id.minute, minuteClockBitmap);

Bitmap secondClockBitmap = getRotatedClock(secondBitmap, getSecondAngle());
remoteViews.setImageViewBitmap(R.id.second, secondClockBitmap);

getRotatedClock方法:

private Bitmap getRotatedClock(Bitmap bitmap, int angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}

当我运行我的手表时,它运行良好大约20秒,之后我在AppWidgetManager的updateAppWidget方法调用的onStartCommand方法中的服务中有TransactionTooLargeException。我试验了代码,当我用这个

替换了getRotatedClock方法实现时
return bitmap

我没有问题。 因此,我认为位图的旋转是异常的原因。这是对的吗?我该怎么办?

0 个答案:

没有答案