Как правильно организовать хранение объектов в Android приложении?
Во-первых, судя по вашему описанию предметной области задачи (всего один тип объектов, фиксированный набор атрибутов объекта), база данных – то, что вам нужно. Не надо бояться инициализации объектов, потому что способа избежать восстановления объекта из хранилища (какое бы оно ни было) в данном случае нет: храните в базе – придётся инициализировать объект значениями столбцов таблицы; храните, скажем, в JSON – придётся инициализировать объект значениями, полученными из JSON-объекта (что, кстати, ещё менее удобно); используете Java-сериализацию – и там тоже будут накладные расходы на восстановление объекта из формата, в котором вы его сохранили, ну и так далее. А БД – очень удобный формат. К тому же, никто вас не заставляет инициализировать все-все объекты на старте программы: если у пользователя очень много заметок, то можно просто подгружать новые по мере листания списка.
Во-вторых, по поводу напоминания — это объекты, с которыми удобно было бы работать, непосредственно обращаясь к ним, вызывая методы
Есть такая вещь, как single responsibility principle (и то же самое на русском), суть которой вкратце состоит в том, что класс должен выполнять только конкретный ограниченный круг обязанностей, и больше ничего. В данном случае ваша ошибка в том, что вы думаете о том, чтобы дать классу заметки обязанности, которые ему по идее не свойственны. Заметка в данном случае – просто сущность, отображающая хранимые данные, больше ничего, и она ничего не должна знать об уровне хранения и т.п. Так что методов типа delete(), save() и подобных у неё точно не должно быть. А вам для удобства хранения и загрузки объектов я предлагаю сделать отдельный класс типа такого (написано на коленке просто чтобы передать идею):public class NotesManager {
       private final SQLiteDatabase db;

       public NotesManager(SQLiteDatabase db) { this.db = db; }

       public Note findById(int noteId) {
              Cursor c = db.query(...);
              //тут чтение в локальные переменные значений
              //отдельных полей из курсора,
              //если он вернул какой-то результат
              return new Note(...ранее считанные значения полей как аргументы конструктора...);
       }

       public void save(...перечисление полей...) {
              //после проверки введённых данных делаете 
              //insert в базу с переданными значениями полей 
       }
}
Также вам понадобятся методы create и delete, но если вы поняли идею, то наверняка справитесь :) Задавайте ещё вопросы, если что-то непонятно.
Не плохой вариант посмотреть в сторону CouchbaseLite