//初学,更倾向自己学习,仅为个人理解
Handler 的用处分为两点:第一,子线程上发送信息,通知主线程处理。第二,主线程上接收并处理信息。
Android的规矩就是不能在主线程上进行耗时操作,比如网络请求以及数据库,大量的计算操作(图片压缩)等,所以我们需要开启子线程来完成这些任务,但是我们并不能直接在子线程上更新UI,Handler机制就可以应用到这里,子线程上发送信息sendMessege,主线程中处理信息HandMessege,周期进行的逻辑自己来写,一个简单的for循环可以实现,不停让线程休眠2000ms,每次改变一下颜色。关键代码如下:
private int[] colors = new int[4]; Message msg; private TextView textView; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); findViews(); } private void findViews() { textView = (TextView) findViewById(R.id.tv_test); textView.setTextColor(getResources().getColor(R.color.white)); initColors(); handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 5000: textView.setText("一号选手!"); textView.setTextColor(getResources().getColor(colors[0])); break; case 10000: textView.setText("二号选手!"); textView.setTextColor(getResources().getColor(colors[1])); break; case 15000: textView.setText("三号选手!"); textView.setTextColor(getResources().getColor(colors[2])); break; case 20000: textView.setText("四号选手!"); textView.setTextColor(getResources().getColor(colors[3])); break; default: break; } } }; new Thread(new Runnable() { @Override public void run() { for (int i = 5000; i < 25000; i = i + 5000) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } msg = new Message(); msg.what = i; handler.sendMessage(msg); if (i >= 20000) { i = 0; } } } }).start(); } private void initColors() { colors[0] = R.color.colorAccent; colors[1] = R.color.colorMisery; colors[2] = R.color.colorNothing; colors[3] = R.color.colorPrimary; }还是要多去使用,自己写几个简单的demo,多调用其中的方法,网上也有别人对于Handler的源码理解。