У тебя всё плохо. Архитектура плохая. Пути решения плохие. Я не могу смотреть на твой код и твои тщетные попытки изобрести очередной велосипед. Я просто покажу как делал я, когда писал свою одну программу для Андроида. Эта схема должна дать примерное понятие о том как надо восстанавливаться после поворотов экрана или закрытия. Хочу отметить, что объект preferences заполняется значения совершенно в других местах, а не в call-back методах. Например, у меня есть специальная активити, в которой я выставляю кучу настроек так как размер/цвет форму кисти.
@Override
protected void onCreate(Bundle in) {
super.onCreate(in);
if (in != null) {
// этот блок выполняется когда произошёл поворот Activity.
// Восстанавливаем из Bundle
}else {
// выполняется когда запущено первый раз. считывание из Preferences
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
application.saveStack(undoStack);
application.saveBitmap(editableBitmap);
writePaintBrushToBundle(paintBrush, outState);
writePaintTextToBundle(paintText, outState);
}
public static void writePaintTextToBundle(Paint p, Bundle bundle) {
bundle.putInt(PAINT_TEXT_COLOR_KEY, p.getColor());
bundle.putFloat(PAINT_TEXT_SIZE_KEY, p.getTextSize());
}
public static Paint readPaintTextFromBundle(Bundle bundle) {
Paint p = new Paint();
int color = bundle.getInt(PAINT_TEXT_COLOR_KEY,
DEFAULT_PAINT_TEXT_COLOR);
float textSize = bundle.getFloat(PAINT_TEXT_SIZE_KEY,
DEFAULT_PAINT_TEXT_SIZE);
p.setColor(color);
p.setTextSize(textSize);
return p;
}
Это примерно должно прояснить тебе как надо работать с Bundle и Preferences. Если до сих пор непонятно - я могу выложить полный код своей активити. Она большая (писал давно, вместе с антипаттернами), но могу указать на методы на которые стоит обратить внимание.