Android欢迎页倒计时和Handler、Thread、Runnable说明

一、设计一个首页倒计时功能,记录handler,Thread,Runnable的区别和特点

(1)handler:主要是更新主线程的UI,handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),它有两个作用:

    1: 、安排消息或Runnable 在某个主线程中某个地方执行,

    2、安排一个动作在不同的线程中执行,可以写一个定时功能:handler.sendEmptyMessageDelayed(times, 1000);延时一秒执行的动作。

(2)Thread:是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,可以开启线程执行耗时操作

new Thread(runnableData).start();
/*将下载的人员检查表数据保存到本地*/
Runnable runnableData=new Runnable() {
    @Override
    public void run() {
        try {
            //执行完耗时操作后更新UI界面
            handlerSync.sendEmptyMessage(0);
        }catch (Exception e){
            Helper.saveFileLog("RoleLoginActivity_runnableData__"+e.toString());
        }
    }
};
Handler handlerSync = new Handler() {
    public void handleMessage(Message msg) {
            super.handleMessage(msg);
             //UI操作
             userVer();
    }
};

(3)Runnable:是实现Runnable接口,当启动线程时,可以在Runnable接口中进行操作。

(4)实现开始界面3秒广告功能,可跳过并显示还剩几秒

sendEmptyMessageDelayed(0,1000);//延时一秒执行  

(5)java代码如下:

public class WelcomeActivity extends AppCompatActivity implements Animation.AnimationListener {
    private int times=3;
    private TextView adtextview;

    Handler handler=new Handler(){//处理者
        @Override
        public void handleMessage(Message msg) {
            TextView textView= findViewById(R.id.adtextview);//初始化控件
            switch (msg.what){//按时间自动逐秒递减
                case 3:
                    textView.setText("跳过3");
                    break;
                case 2:
                    textView.setText("跳过2");
                    break;
                case 1:
                    textView.setText("跳过1");
                    break;
            }
            times--;
            handler.sendEmptyMessageDelayed(times, 1000);
            super.handleMessage(msg);//发送消息指令
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        setAnimation();
        handler.sendEmptyMessageDelayed(times, 1000);
        adtextview=findViewById(R.id.adtextview);
        adtextview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //当动画结束的时候跳转
                try{
                    handler.removeMessages(times);
                    startActivity(new Intent(WelcomeActivity.this,MainBuildingActivity.class));
                    finish();
                }catch (Exception e){
                    startActivity(new Intent(WelcomeActivity.this,MainBuildingActivity.class));
                    finish();
                    e.printStackTrace();
                }
            }
        });

    }

    private void setAnimation() {//渐变动画
        ImageView imageView= (ImageView) findViewById(R.id.adimageview);
        AlphaAnimation a=new AlphaAnimation(0.8f,1);
        a.setDuration(times*1000);//时间
        a.setAnimationListener(this);//配置监听器
        imageView.startAnimation(a);//启动动画

    }

    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        //当动画结束的时候跳转
        startActivity(new Intent(WelcomeActivity.this,MainBuildingActivity.class));
        finish();
    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
}

(6)xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_ad"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <ImageView android:id="@+id/adimageview"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/xuan_chaun">
    </ImageView>

    <TextView android:id="@+id/adtextview"
        android:layout_alignParentRight="true"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginTop="20dp"
        android:text="跳过广告"
        android:padding="@dimen/text_size_10"
        android:background="@drawable/rectangle_fill"
        android:alpha="0.3"
        android:textColor="@color/white">
    </TextView>
</RelativeLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值