我正在用秒针创建一个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
我没有问题。 因此,我认为位图的旋转是异常的原因。这是对的吗?我该怎么办?