Android欢迎页倒计时和Handler、Thread、Runnable说明
2018-02-27 10:59
393 查看
一、设计一个首页倒计时功能,记录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();
(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>
(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>
相关文章推荐
- Android如何让Handler中内部run停止(runnable/thread)
- Android开发笔记: Runnable,Handler ,Thread的使用方法
- Android开发笔记之:Handler Runnable与Thread的区别详解
- Android中Handler 、Thread和Runnable之间的关系
- 【Android】 Handler, Thread, Runnable的关系小总结
- Android开发笔记之:Handler Runnable与Thread的区别详解
- Android Handler Runnable Message Thread 简单用法
- android开发之Handler和HandlerThread用法说明
- Android中Handler Runnable与Thread的区别详解
- Android-Handler, Thread, Runnable的简单应用
- Android开发笔记之:Handler Runnable与Thread的区别详解
- android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系
- Android开发笔记之:Handler Runnable与Thread的区别详解
- Android中Handler、Thread(HanlderThread)、Runnable之间的关系
- Android笔记——Handler Runnable与Thread的区别
- Android从源码分析handler.post(runnable),view.post(runnable),runOnUiThread(runnable)执行时机
- Android开发笔记之:Handler Runnable与Thread的区别详解
- Android中Handler Runnable与Thread的区别
- Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!
- android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系