У меня есть фоновый работник, который я переключаю в одном месте, но могу добавить фильтр постфактум в другом месте. Когда я добавляю фильтр, я пытаюсь обновить и/или удалить исходного работника, если он существует, но, похоже, он не обновляется. Я даже пробовал полностью удалить обновление (которое возвращает работника) и заменил его элементами prune и/или cancelAllWork, которые отменяют работу. Затем я раскомментирую логику обновления, и это снова приводит к простому добавлению другого без отмены оригинала. Если оставить это в покое, могут остаться стопки рабочих. Кажется, что при перезапуске приложения лишних рабочих нет. Однако на самом деле это не решает проблему.
Почему этот код не работает должным образом?
Справедливое предупреждение: я знаю, что этот код — бардак. .
Менеджер уведомлений
У меня есть фоновый работник, который я переключаю в одном месте, но могу добавить фильтр постфактум в другом месте. Когда я добавляю фильтр, я пытаюсь обновить и/или удалить исходного работника, если он существует, но, похоже, он не обновляется. Я даже пробовал полностью удалить обновление (которое возвращает работника) и заменил его элементами prune и/или cancelAllWork, которые отменяют работу. Затем я раскомментирую логику обновления, и это снова приводит к простому добавлению другого без отмены оригинала. Если оставить это в покое, могут остаться стопки рабочих. Кажется, что при перезапуске приложения лишних рабочих нет. Однако на самом деле это не решает проблему. Почему этот код не работает должным образом? Справедливое предупреждение: я знаю, что этот код — бардак. . Менеджер уведомлений [code]class NotificationHandler : ComponentActivity() { private val CHANNEL_ID = "posts" private val SHARED_PREF_NAME = "notification_prefs"
private fun saveTextToSharedPreferences(text: String) { if (text != "") { val keywords = text.split(",").map { it.trim() }.toSet() filter = HashSet() // Clearing the old filterText = "" // Clearing the old filter = HashSet(filter + keywords) // Update the filter set with the new keywords sharedPreferences.edit { putString("filterText", text) putStringSet("filter", filter) }
// Only runs if notifications are enabled val workManager = WorkManager.getInstance(context) val workInfos = workManager.getWorkInfosForUniqueWork("updateCheckRequest").get() if (workInfos.isNotEmpty()) { workManager.cancelAllWork() // Added during testing workManager.pruneWork() // Added during testing // Specifically where the problem is workManager.enqueueUniquePeriodicWork( "updateCheckRequest", ExistingPeriodicWorkPolicy.UPDATE, updateCheckRequest ) } } else { filter = HashSet() // Clearing the old filterText = "" // Clearing the old sharedPreferences.edit{ putStringSet("filter", HashSet()) putString("filterText", "") }
// Only runs if notifications are enabled val workManager = WorkManager.getInstance(context) val workInfos = workManager.getWorkInfosForUniqueWork("updateCheckRequest").get() if (workInfos.isNotEmpty()) { workManager.cancelAllWork() // Added during testing workManager.pruneWork() // Added during testing // Specifically where the problem is workManager.enqueueUniquePeriodicWork( "updateCheckRequest", ExistingPeriodicWorkPolicy.UPDATE, updateCheckRequest ) } } } } [/code] UpdateWorkerCheck [code]class UpdateCheckWorker(context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): Result { try {
val appContext = applicationContext
val sharedPreferences = appContext.getSharedPreferences("ExclusionPrefs", Context.MODE_PRIVATE) val filter = sharedPreferences.getStringSet("filter", HashSet()) ?: HashSet()
val intent = Intent(appContext, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK val pendingIntent: PendingIntent = PendingIntent.getActivity( appContext, 1, intent, PendingIntent.FLAG_IMMUTABLE )
data class CheckItem(val title: String, val id: String)
val retrofit = Retrofit.Builder() .baseUrl("https://www.reddit.com/r/") .addConverterFactory(GsonConverterFactory.create()) .build()
val retrofitAPI = retrofit.create(RetroFitAPI::class.java) val response = retrofitAPI.getData().execute()
if (response.isSuccessful) { val db_li = LatestDatabase.getInstance(appContext) if (db_li.latestItemDao().getAll() == null) { return Result.failure()}
val data = response.body() data?.let { val check = it.data.children.map { child -> CheckItem(title = child.data.title, id = child.data.id) }.filterNot { check -> filter.any { keyword -> check.title.contains(keyword, ignoreCase = true) } }
var notificationId = (0..1000).random() // This should prob be a static int but I don't want it to be overwritten
// Schedule the worker to run periodically val updateCheckRequest = PeriodicWorkRequestBuilder(5, TimeUnit.MINUTES) .setConstraints(Constraints(NetworkType.CONNECTED)) .setInitialDelay(1, TimeUnit.MINUTES) .build() [/code] Спасибо за информацию.
Я пытаюсь создать подпроцесс работника из моего приложения Java, используя команду JVM-работник. Но он дает не распознанный вариант: - -worker с диалоговом окном ниже в запуске JVM. .sstatic.net /Zoebwlx5.png />
Я пытаюсь развернуть новый...
Я пытаюсь создать подпроцесс работника из моего приложения Java, используя команду JVM-Worker . Но это дает не распознанный вариант: --DOURKER с приведенным ниже диалоговом окном в запуске JVM. .sstatic.net /Zoebwlx5.png />
Я пытаюсь развернуть...
Я пытаюсь создать подпроцесс работника из моего приложения Java, используя команду JVM-работник. Но он дает не распознанный вариант: - -worker с диалоговом окном ниже в запуске JVM. .sstatic.net /Zoebwlx5.png />
Я пытаюсь развернуть новый...
На самом деле я работаю над проектом с серверной частью в Kotlin Springboot с API, сгенерированным OpenApi (в формате yaml), который я хочу подключить к клиенту Android Jetpack Compose.
Что я делаю Я хочу сгенерировать из моего серверного проекта...
На самом деле я работаю над проектом с серверной частью Kotlin Springboot с API, сгенерированным OpenApi (в формате yaml), который я хочу подключить к клиенту Android Jetpack Compose.
Что я делаю Я хочу сгенерировать из моего серверного проекта...