大家好,仓促的时间里面,为大家带来点干货,可能大家在别的地方也看见过类似的,但是我还是想整理出来,希望大家喜欢。
在安卓很早的时候,很多操作都是在主线程中完成的,随着用户体验和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” 这个是主要当你打开程序的时候出现短暂的界面空白所做的。我自己实践了感觉还不错,希望大家能够喜欢,也希望老鸟们不要嫌弃~
喜欢的也可以扫码我的公众号关注一下哦