override
fun
onCreate
(
savedInstanceState
:
Bundle
?
)
{
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
activity_main
)
startBtn
.
setOnClickListener
{
startTimer
(
)
}
stopBtn
.
setOnClickListener
{
stopTimer
(
)
}
private
fun
startTimer
(
)
{
timer
=
fixedRateTimer
(
""
,
false
,
0
,
1000
)
{
toast
(
"得瑟中。。。"
)
Log
.
d
(
"MainActivity"
,
"得瑟中。。。"
)
private
fun
stopTimer
(
)
{
timer
.
cancel
(
)
toast
(
"醒醒!!!"
)
Log
.
d
(
"MainActivity"
,
"醒醒!!!"
)
private
fun
toast
(
text
:
String
)
{
runOnUiThread
{
Toast
.
makeText
(
this
,
text
,
Toast
.
LENGTH_SHORT
)
.
show
(
)
https://gitee.com/hspbc/TimerDemo
厦门大学计算机专业 | 前华为工程师
Java | 安卓 | 前端 | 小程序 | 鸿蒙
公众号:蓝不蓝编程
目标在kotlin中使用Timer执行定时任务.解决方案class MainActivity : AppCompatActivity() { lateinit var timer: Timer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSt...
var period: Long = 100;
Timer
().schedule(1, period) {
Logger.e(TAG, "showSplashAd: ${tryTime}")
tryTime += 1
if ( tryTime > (1000 / period)) {
最近项目需求里面遇到了一个很常见的需求:根据邮箱地址获取验证码,过一段时间(通常是60s)后才能再次获取,效果如下:
在网上找了一些倒计时按钮相关的文章,感觉写的逻辑并不是很清晰,于是便自己写了一个分享出来,提供给也有类似需求的朋友们。
这个需求实现起来非常简单,采用自定义 View 的方式,首先我们创建一个
Timer
Button 类继承自 MaterialButton(实现圆角按钮效果非常简单),当然如果继承自普通的 Button 也没什么不行,可以通过 shap
Android实现定时任务有很多种方式,为什么选择了Al
arm
Manager + BroadcastReceiver呢?
因为Al
arm
Manager是系统级别的闹钟服务,如果你的项目存在长时间在后台运行的定时任务,因为Android设备有自己的休眠策略,当长时间的无操作,设备会自动让CPU进入 休眠状态,这样就可能导致
Timer
中
的定时任务无法正常运行!而Al
arm
Manager则不存在这种情况,因为Al
arm
Manager具有唤醒CPU的功能,可以保证每次需要执行特定任务时CPU都能正常工作。
java.util.
Timer
定时器
schedule(
Timer
Task task, long delay) 延迟delay毫秒后,执行一次task
schedule(
Timer
Task task, long delay, long period) 延迟delay毫秒后,执行第一次task,然后每隔period毫秒执行一次task
delay为0表示没有延迟,立即执行一次task
Timer
().schedule(object :
Timer
Task() {
前言:多个并发线程操作UI界面时,容易导致线程安全问题。Android为了线程安全,并不允许我们在UI线程外操作UI。故很多时候我们做界面刷新都需要通过Handler来通知UI组件更新,Activity
中
UI组件
中
的信息用Handler来传递。学过redis的单线程模型,应该很好理解这一点,二者最大的共同点就是将消息都放到一个队列
中
,串行地的消费,从而保证线程安全。
Handler原理简单示意
(如果想深入的了解的,推荐看《深入理解Android》一书)
private var ru
您好,关于展示
Kotlin
中
enum 的值,您可以
使用
enumValues 和 enumValueOf 函数来实现。例如,假设有一个名为 Color 的 enum 类型,您可以
使用
以下代码来展示其所有值:
enum class Color {
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
fun main() {
val colors = enumValues<Color>()
colors.forEach { color ->
println(color)
输出结果为:
ORANGE
YELLOW
GREEN
INDIGO
VIOLET
如果您想根据字符串获取对应的 enum 值,可以
使用
enumValueOf 函数。例如:
val color: Color = enumValueOf("RED")
println(color)
输出结果为:
希望能对您有所帮助。
Android Studio编译失败:org.gradle.api.tasks.TaskExecutionException: Execution failed for task
19209