一、设计一个首页倒计时功能,记录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>