Andorid启动页倒计时用Handler实现

  • 大家好,仓促的时间里面,为大家带来点干货,可能大家在别的地方也看见过类似的,但是我还是想整理出来,希望大家喜欢。

  • 在安卓很早的时候,很多操作都是在主线程中完成的,随着用户体验和app的友好性的不断提升,android把耗时操作都放在了子线程中进行。由此我们的handler就尤为重要了,简单的介绍下handler;

  • -

一、Handler的定义:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
- 二、Handler一些特点
- 传递Message。用于接受子线程发送的数据, 并用此数据配合主线程更新UI。
- 传递Runnable对象。用于通过Handler绑定的消息队列,安排不同操作的执行顺序。
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable,long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)

好了说了这么多,那我们就用一个实例来看下Handler是怎么完成的吧;
activity_splash.xml 启动页的代码

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="5s"
        android:textColor="@color/colorAccent"
        android:textSize="20sp" />
</RelativeLayout>

SplashActivity 中的代码

public class SplashActivity extends Activity {

private static int TIME = 5;
private TextView mTime;
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
                TIME--;
                mTime.setText(TIME + "s");
                if (TIME > 0) {
                    Message message = handler.obtainMessage(1);
                    handler.sendMessageDelayed(message, 1000);      // send message
                } else {
                //跳转到主界面
                    goHome();
                }
        }
        super.handleMessage(msg);
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_splash);
    mTime = (TextView) findViewById(R.id.tv_time);
    Message message = handler.obtainMessage(1);
    handler.sendMessageDelayed(message, 1000);


}
private void goHome() {
    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
    startActivity(intent);
    finish();
} }

总结:通过 handler.sendMessageDelayed(message, 1000); 方法,我们设置的是1秒钟通知handler改变我们界面的倒计时,我为什么在布局文件中的TextView中填写一个android:text=”5s” 这个是主要当你打开程序的时候出现短暂的界面空白所做的。我自己实践了感觉还不错,希望大家能够喜欢,也希望老鸟们不要嫌弃~

喜欢的也可以扫码我的公众号关注一下哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章