Вы ищите уникальное решение, на все случае жизни. Но так не всегда бывает, каждая задача требует свои решения.
+1
Но тогда ведь я не смогу использовать CursorLoader c CursorAdapter. Или я ошибаюсь?
да, если поле не _id то недоступен целый ряд родных фич из sdk даже по нажатию на элемент списка вы не получите его ключ (из коробки если пк _id то при клике на элемент списка вы получите его _id)
_id по сути уже стандарт для android, поэтому кроме случаев где по каким то очень важным причинам вам нужно назвать пк как то иначе, я бы рекомендовал все же называть пк _id
Например сделать что то типа репозитория, но только без провайдера
Конечно можно, но тогда целый ряд фич придется пилить самому
мне нравится ContentProvider за его простоту, но не нравится за кривое api (нет, правда, метод в котором почти все параметры частенько null в 2016 году это через чур) но его api компенсируется его стабильностью
еще раз опишу кейс его использования когда не нужно давать куда то доступ
Клиент сферического интернет магазина
для наглядности представим что у нас планшет и что экран разделен на 2 фрагмента
первый фрагмент лента товаров
второй корзина
(да странный ux но что поделать .... )
в ленте пользователь жмет на кнопку добавить в корзину, при этом волшебным образом обновляется ui во втором фрагменте при этом никакой сложной логики реализовывать для этого не нужно
думаю такого же эффекта можно добиться при использовании rxjava но придется попотеть