android - 协程作业一键操作
问题描述
变量声明
private lateinit var wayoJob: Job
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + wayoJob
功能
@InternalCoroutinesApi
private fun startRepeatingJob(timeInterval: Long): Job {
return CoroutineScope(Dispatchers.Default).launch {
while (NonCancellable.isActive) {
Log.i("API", "UPDATE")
delay(timeInterval)
}
}
}
在开始按钮中
wayoJob = startRepeatingJob(5000L)
在 Button end 和 onDestroy()
wayoJob.cancel()
当我单击结束按钮时,它返回一个错误:
引起:kotlin.UninitializedPropertyAccessException:lateinit 属性 wayoJob 尚未初始化
有没有办法解决?
我必须做一个功能,当我按下一个按钮时每隔几秒钟开始执行一次,当我点击另一个按钮时会结束。
编辑:
我可以用我自己的shouldBeActive
价值尝试这样的事情,并在需要时运行,但这不是应该的
var shouldBeActive = false
@InternalCoroutinesApi
private fun startRepeatingJob(timeInterval: Long): Job {
return CoroutineScope(Dispatchers.Default).launch {
while (NonCancellable.isActive && shouldBeActive) {
Log.i("API", "UPDATE")
delay(timeInterval)
}
}
}
解决方案
我找到了解决方案。
我有一个活动重新加载并且对象重置
解决方案是像下面这样插入它。此解决方案可确保同时不会创建第二个对象
companion object {
private lateinit var wayoJob: Job
}
示例全班:
class StartActivity : AppCompatActivity(), CoroutineScope {
companion object {
private lateinit var wayoJob: Job
}
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + wayoJob
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_start)
}
@InternalCoroutinesApi
private fun startRepeatingJob(timeInterval: Long): Job {
return CoroutineScope(Dispatchers.Default).launch {
while (NonCancellable.isActive) {
Log.i("API", "UPDATE")
delay(timeInterval)
}
}
}
@InternalCoroutinesApi
fun endBtnOnClick(view: View?) {
wayoJob.cancel()
}
@InternalCoroutinesApi
fun startBtnOnClick(view: View?) {
wayoJob = startRepeatingJob(5000L)
}
override fun onDestroy() {
super.onDestroy()
wayoJob.cancel()
}
}
推荐阅读
- python - TypeError: float() 参数必须是字符串或数字,而不是带有注释和 iterrows 的“元组”
- powershell - 在 PnP PowerShell 中创建 SPO 网站集时,租户管理员 url 应该是什么
- django - 如何使用 s3 作为存储在 django 中自动显示媒体文件?
- python - 删除 xpath 中的链接文本
- node.js - 如何为以下条件编写mongo的聚合函数
- javascript - 将数组格式化为 Javascript 中 Google Map API 格式的 Lat Lng 数组
- excel - 使用匹配的主题和开始时间从 Office365 活动中将与会者提取到 Excel 中
- php - 我想在日期之间过滤后从数据库中获取数据。我试过但没有找到数据
- ios - 不知何故结合搜索控制器不起作用,知道吗?
- javascript - 如何将嵌套函数导出为模块