Android:Handler事件处理机制

末蓝、 2022-07-12 01:28 388阅读 0赞

Handler是什么呢:是Android提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以用它发送消息,也可以通过它处理消息。


Android在设计之初,就封装了一套消息的创建、传递、处理机制。如果不遵循这样的机制,就没有办法更新UI信息的,就会抛出异常。


Handler的使用:

  1. package com.example.handler;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. public class MainActivity extends AppCompatActivity {
  6. //第一步:声明组件
  7. private TextView tv_handler;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. tv_handler = (TextView) findViewById(R.id.tv_handler);
  13. //创建一个新的线程
  14. new Thread(){
  15. public void run(){
  16. try {
  17. Thread.sleep(1000);
  18. tv_handler.setText("更新线程");
  19. } catch (InterruptedException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }.start();
  24. }
  25. }

默认情况下,Android是不允许在其他线程里面更新UI的,所以会报错:
这里写图片描述
这时,我们就需要Handler机制更新UI:

  1. package com.example.handler;
  2. import android.os.Handler;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class MainActivity extends AppCompatActivity {
  7. //第一步:声明组件
  8. private TextView tv_handler;
  9. //创建一个Handler机制
  10. private Handler handler = new Handler();
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. tv_handler = (TextView) findViewById(R.id.tv_handler);
  16. //创建一个新的线程
  17. new Thread(){
  18. public void run(){
  19. try {
  20. Thread.sleep(1000);
  21. //简单实现Handler的Post方法
  22. handler.post(new Runnable() {
  23. @Override
  24. public void run() {
  25. tv_handler.setText("更新线程");
  26. }
  27. });
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }.start();
  33. }
  34. }

这样就完成了更新UI的操作:
这里写图片描述


实现Android项目中图片的简单轮播效果:
首先需要添加一个ImageView,这很简单,不多赘述。

  1. package com.example.handler;
  2. import android.os.Handler;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.widget.ImageView;
  6. import android.widget.TextView;
  7. public class MainActivity extends AppCompatActivity {
  8. //第一步:声明组件
  9. private TextView tv_handler;
  10. //创建一个Handler机制
  11. private Handler handler = new Handler();
  12. private ImageView iv_handler;
  13. //创建一个图片的数组
  14. private int images[] = {R.drawable.ic_beenhere_black_48dp, R.drawable.ic_directions_ferry_black_36dp, R.drawable.ic_flight_black_48dp};
  15. //创建一个索引
  16. private int index;
  17. private MyRunnable myRunnable = new MyRunnable();
  18. class MyRunnable implements Runnable {
  19. @Override
  20. public void run() {
  21. index++;
  22. index = index % 3;
  23. iv_handler.setImageResource(images[index]);
  24. handler.postDelayed(myRunnable, 1000);
  25. }
  26. }
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_main);
  31. tv_handler = (TextView) findViewById(R.id.tv_handler);
  32. iv_handler = (ImageView) findViewById(R.id.iv_handler);
  33. handler.postDelayed(myRunnable,1000);
  34. //随便找三张图片,放到drawable中
  35. /*创建一个新的线程 new Thread(){ public void run(){ try { Thread.sleep(1000); //简单实现Handler的Post方法 handler.post(new Runnable() { @Override public void run() { tv_handler.setText("更新UI"); } }); } catch (InterruptedException e) { e.printStackTrace(); } } }.start();*/
  36. }
  37. }

利用Handler实现图片轮播,就实现了。

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读

    相关 事件处理机制

    事件: 1. 我们在网页中的某个操作(有的操作对应多个事件)。 例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。