如何在android中使用handler实现一个倒计时功能

发布时间:2020-11-25 15:22:57

来源:亿速云

阅读:145

作者:Leah

如何在android中使用handler实现一个倒计时功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

xml

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World!"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

java

package com.tcy.handlertest;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

import java.lang.ref.WeakReference;

public class MainActivity extends AppCompatActivity {

/**

* 倒计时标记handler code

*/

public static final int COUNT_DOWN_CODE = 10001;

/**

* 倒计时最大值

*/

public static final int MAX_COUNT = 10;

/**

* 倒计时间隔

*/

public static final int DELAY_MILLIS = 1000;

TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = findViewById(R.id.text);

CountdownTimeHandler handler = new CountdownTimeHandler(this);

Message message = Message.obtain();

message.what = COUNT_DOWN_CODE;

message.arg1 = MAX_COUNT;

handler.sendMessageDelayed(message, DELAY_MILLIS);

}

public static class CountdownTimeHandler extends Handler {

//弱引用加在上下文上面

final WeakReference weakReference;

//这个方法要改一下,这样就能直接传进来上下文

public CountdownTimeHandler(MainActivity activity) {

this.weakReference = new WeakReference<>(activity);

}

@Override

public void handleMessage(@NonNull Message msg) {

super.handleMessage(msg);

//得到上下文

MainActivity activity = weakReference.get();

switch (msg.what) {

case COUNT_DOWN_CODE:

int value = msg.arg1;

activity.textView.setText(String.valueOf(value--));

if (value >= 0) {

//再把value发出去

Message message = Message.obtain();

message.what = COUNT_DOWN_CODE;

message.arg1 = value;

sendMessageDelayed(message, DELAY_MILLIS);

}

break;

}

}

}

}

看完上述内容,你们掌握如何在android中使用handler实现一个倒计时功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐