小编Gau*_*han的帖子

在AlarmManager中重复警报的时间间隔变化

我正在寻找setRepeating(@AlarmType int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)AlarmManager的方法,并希望解决一个用例.

用例是我想设置具有不同intervalMillis值的重复警报.就像我想在2小时,5小时和第二天上午9点之后显示通知.或者我想在每个月的第一个日期做一些事情.

我有两个解决方案.我可以立即设置所有报警,也可以在收到上一个报警时设置下一个报警(如果没有报警与第二个用例更相似).问题是如果错过了触发警报,我将无法触发进一步的警报并且整个链条会断开.

如果我错过了它,Android是否有任何提供的东西,否则Android不应该提供这样的灵活性?

android alarm alarmmanager

5
推荐指数
1
解决办法
149
查看次数

避免在子协程异常时取消父工作

我正在尝试在Android的Kotlin协程中处理异常

我的用例是我想在后台执行一系列任务(以异步方式),并在单个活动中更新多个UI组件。

我设计了一个BaseActivity要实现的结构,CoroutineScope以便可以将调用的Couroutine与活动的生命周期结合在一起。

另外,我有一个Repository处理网络调用的类。

我已经实现了同时运行多个任务。我知道如果我使用单个Job对象取消活动中的所有协程并onDestroy()在活动中执行(launch)多个协程,则任何单个协程中的Exception都会Job从其中取消CoroutineContext。并且由于Job附加到活动的生命周期中,它也会取消所有其他协程。

我尝试使用CoroutineExceptionHandler。它捕获异常,但也取消Job。结果取消了所有其他协程。

我想要的是?

  1. 能够使用单个 Job对象附加活动生命周期
  2. 一个协程中的异常不应取消其他协程

在下面添加代码

class BaseActivity : AppCompatActivity(), CoroutineScope {

val job = Job()
override val coroutineContext: CoroutineContext
    get() = Dispatchers.Main + job

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    launch(coroutineContext) {
        Log.i("GURU", "launch1 -> start")
        val result1Deferred = async { Repository().getData(1) }
        val result2Deferred = …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.coroutines

3
推荐指数
1
解决办法
732
查看次数