SDK (Deprecated)

SharedPreferences
SharedPreferences устарел. Мигрируй на Jetpack DataStore.
https://developer.android.com/reference/android/content/SharedPreferences
https://developer.android.com/training/data-storage/shared-preferences

Механизм для хранения простых данных в виде пар «‎ключ-значение»‎. Используется для сохранения настроек приложения или небольших данных, таких как пользовательские предпочтения и состояния UI. Данные, записанные в SharedPreferences, сохраняются между сессиями и остаются доступными после перезапуска приложения.

Context.MODE_PRIVATE является наиболее безопасным и широко используемый режимом доступа к SharedPreferences. Он делает данные доступными только вашему приложению.

val sharedPreferences = getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
commit

Cохраняет данные синхронно, блокирует поток до завершения операции, возвращает true при успешном сохранении и false в случае ошибки.

sharedPreferences.edit().apply {
    putInt("age", 25)
    commit()
}
apply

Сохраняет изменения асинхронно.

sharedPreferences.edit().apply {
    putInt("age", 25)
    apply()
}
Поддерживаемые типы данных
ТипМетоды
BooleangetBoolean putBoolean
IntgetInt putInt
FloatgetFloat putFloat
LonggetLong putLong
StringgetString putString
Set<String>getStringSet putStringSet
AppWidget
AppWidget устарел. Мигрируй на Jetpack Glance.
https://developer.android.com/develop/ui/views/appwidgets/overview
https://developer.android.com/develop/ui/views/appwidgets
https://developer.android.com/develop/ui/views/appwidgets/enhance
https://developer.android.com/develop/ui/views/appwidgets/advanced
https://developer.android.com/develop/ui/views/appwidgets/collections
https://developer.android.com/develop/ui/views/appwidgets/layouts
https://developer.android.com/develop/ui/views/appwidgets/configuration
https://developer.android.com/develop/ui/views/appwidgets/discoverability
https://developer.android.com/develop/ui/views/appwidgets/host

Небольшое интерактивное приложение, которое размещается на главном экране устройства. Оно отображает информацию или предоставляет быстрый доступ к функциям приложения без необходимости его открытия.

• Отображение информации в реальном времени (погода, часы, календарь и т.д.).

• Взаимодействие с пользователем (кнопки, элементы управления).

• Регулярное обновление данных, отображаемых на виджете.

AppWidgetProvider

Основной компонент для создания AppWidget. Это подкласс BroadcastReceiver, который управляет событиями, связанными с виджетом: его созданием, обновлением, удалением.

class MyAppWidgetProvider: AppWidgetProvider() {
    override fun onUpdate(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetIds: IntArray?) {
        // Логика обновления виджета
    }
}
RemoteViewsService

Используется для создания удаленного адаптера (RemoteViewsFactory) для виджетов, отображающих списки данных, таких как ListView и GridView. Этот класс позволяет передавать данные из приложения в виджет, которые затем отображаются с помощью RemoteViews.

class MyWidgetService: RemoteViewsService() {
    override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
        return MyWidgetFactory(this.applicationContext)
    }
}
Lifecycle
onEnable

Вызывается, когда пользователь добавляет первый экземпляр виджета на домашний экран. Если у пользователя есть несколько виджетов одного типа, метод будет вызван только один раз, когда добавляется первый. Здесь можно инициализировать ресурсы, необходимые для работы виджета, такие как сервисы для фоновых задач или настройки расписания обновления.

override fun onEnabled(context: Context) {
    // Инициализация ресурсов, настройка обновления
}
onUpdate

Вызывается системой в зависимости от заданного времени обновления виджета. Он вызывается для обновления всех виджетов, которые находятся на экране. Здесь вы можете задать новый вид или данные для каждого экземпляра виджета. Метод получает appWidgetIds, массив идентификаторов всех активных виджетов данного типа. Нужно обновить каждый виджет, используя AppWidgetManager.

override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
    for (appWidgetId in appWidgetIds) {
        val views = RemoteViews(context.packageName, R.layout.widget_layout)
        views.setTextViewText(R.id.widgetTextView, "Hello Widget!")
        appWidgetManager.updateAppWidget(appWidgetId, views)
    }
}
onReceive

Это базовый метод, унаследованный от BroadcastReceiver. Он вызывается каждый раз, когда виджет получает broadcast-сообщение (например, пользователь взаимодействует с виджетом). Помимо стандартных сообщений, таких как обновления, можно также перехватывать и обрабатывать кастомные действия, например, нажатия на элементы виджета.

override fun onReceive(context: Context, intent: Intent) {
    super.onReceive(context, intent)
    if (intent.action == "com.example.widget.ACTION_BUTTON_CLICK") {
        // Обработка нажатия кнопки в виджете
    }
}
onDeleted

Вызывается, когда один или несколько виджетов данного типа были удалены с главного экрана. Он вызывается для каждого экземпляра виджета, который был удален. Здесь можно очистить ресурсы, которые использовал конкретный экземпляр виджета, такие как данные или настройки.

override fun onDeleted(context: Context, appWidgetIds: IntArray) {
    // Очистка данных, связанных с удаленными виджетами
}
onDisabled

Вызывается, когда последний экземпляр виджета был удален с экрана. Это последний шаг в жизненном цикле виджета. Здесь можно освободить ресурсы, которые были необходимы для работы всех виджетов данного типа (например, остановка сервисов, отмена задач по расписанию).

override fun onDisabled(context: Context) {
    // Освобождение всех ресурсов, когда последний виджет удален
}