Я новичок в Android Wear и работаю над обновлением данных об осложнениях каждые 10 секунд в проекте «Пример осложнений Android».
Я использую класс DataStorage для обновления данных, а ShortTextDataSourceService будет наблюдать за данные изменяются и обновляются. Но данные об осложнениях обновляются так быстро, что предполагается, что они будут обновляться каждые 10 секунд. Вот мой код, что я сделал не так?
Класс ShortTextDataSourceService:
private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
private val dataStorage = DataStorage(this)
override fun onCreate() {
super.onCreate()
observeComplicationData(this)
dataStorage.startScheduledUpdates()
}
private fun observeComplicationData(context: Context) {
scope.launch {
dataStorage.observeComplicationState().collect { newState ->
Log.d("ShortTextDataSourceService", "Data updated: $newState")
val componentName = ComponentName(
context,
ShortTextDataSourceService::class.java
)
val requester = ComplicationDataSourceUpdateRequester.create(
context,
componentName
)
requester.requestUpdateAll()
Log.d("ShortTextDataSourceService", "Complication update requested---.")
}
}
}
override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData? {
Log.d("ShortTextDataSourceService", "OLD VALUE :::> $updateCount")
updateCount = dataStorage.observeComplicationState().first().toString()
Log.d("ShortTextDataSourceService", "NEW VALUE :::> $updateCount")
}
Класс DataStorage:
private val COMPLICATION_STATE_KEY = longPreferencesKey("complication_state")
class DataStorage(private val context: Context) {
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
fun startScheduledUpdates() {
Log.d("ShortTextDataSourceService", "Scheduled Updates--only once")
scope.launch {
while (true) {
updateComplicationState()
delay(30000) // 10 seconds
}
}
}
suspend fun updateComplicationState() {
var newValue = 0L
context.dataStore.edit { preferences ->
val currentValue = preferences[COMPLICATION_STATE_KEY] ?: 0L
newValue = currentValue + 1
preferences[COMPLICATION_STATE_KEY] = newValue
}
}
fun observeComplicationState(): Flow {
Log.d("DataStorage", "Observe Updates--")
return context.dataStore.data.map { preferences ->
preferences[COMPLICATION_STATE_KEY] ?: 0L
}
}
}
val Context.dataStore: DataStore by preferencesDataStore(
name = "Complications",)
Подробнее здесь: https://stackoverflow.com/questions/793 ... frequently
Почему мое DataStorage обновляется очень часто ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1736604458
Anonymous
Я новичок в Android Wear и работаю над обновлением данных об осложнениях каждые 10 секунд в проекте «Пример осложнений Android».
Я использую класс DataStorage для обновления данных, а ShortTextDataSourceService будет наблюдать за данные изменяются и обновляются. Но данные об осложнениях обновляются так быстро, что предполагается, что они будут обновляться каждые 10 секунд. Вот мой код, что я сделал не так?
Класс ShortTextDataSourceService:
private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
private val dataStorage = DataStorage(this)
override fun onCreate() {
super.onCreate()
observeComplicationData(this)
dataStorage.startScheduledUpdates()
}
private fun observeComplicationData(context: Context) {
scope.launch {
dataStorage.observeComplicationState().collect { newState ->
Log.d("ShortTextDataSourceService", "Data updated: $newState")
val componentName = ComponentName(
context,
ShortTextDataSourceService::class.java
)
val requester = ComplicationDataSourceUpdateRequester.create(
context,
componentName
)
requester.requestUpdateAll()
Log.d("ShortTextDataSourceService", "Complication update requested---.")
}
}
}
override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData? {
Log.d("ShortTextDataSourceService", "OLD VALUE :::> $updateCount")
updateCount = dataStorage.observeComplicationState().first().toString()
Log.d("ShortTextDataSourceService", "NEW VALUE :::> $updateCount")
}
Класс DataStorage:
private val COMPLICATION_STATE_KEY = longPreferencesKey("complication_state")
class DataStorage(private val context: Context) {
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
fun startScheduledUpdates() {
Log.d("ShortTextDataSourceService", "Scheduled Updates--only once")
scope.launch {
while (true) {
updateComplicationState()
delay(30000) // 10 seconds
}
}
}
suspend fun updateComplicationState() {
var newValue = 0L
context.dataStore.edit { preferences ->
val currentValue = preferences[COMPLICATION_STATE_KEY] ?: 0L
newValue = currentValue + 1
preferences[COMPLICATION_STATE_KEY] = newValue
}
}
fun observeComplicationState(): Flow {
Log.d("DataStorage", "Observe Updates--")
return context.dataStore.data.map { preferences ->
preferences[COMPLICATION_STATE_KEY] ?: 0L
}
}
}
val Context.dataStore: DataStore by preferencesDataStore(
name = "Complications",)
Подробнее здесь: [url]https://stackoverflow.com/questions/79347004/why-does-my-datastorage-update-very-frequently[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия