本文共 3424 字,大约阅读时间需要 11 分钟。
Handler处理消息(Message),Message放在Message队列里(MessageQueue),然后Looper会把消息取出来给Handler,Handler会去处理,处理完成后,Looper再从MessageQueue里再给Handler,就是周而复始的这样的一个过程
参考博客:https://blog.csdn.net/qq_37321098/article/details/81535449
如何使用
Message
MessageQueue
Fields | |
---|---|
public static final Creator | CREATOR |
public int | arg1 |
public int | arg2 |
public Object | obj |
public Messager | replyTo |
public int | sendingUid |
public int | what |
6.1.1 在activity_main.xml中添加一个Button组件
6.1.2 在MainActivity中为Button按钮添加点击事件
public class MainActivity extends AppCompatActivity { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = findViewById(R.id.handlerBtn); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, HandlerButtonActivity.class); startActivity(intent); } }); }}
6.1.3 创建HandlerButtonActivity类并继承Handler
public class HandlerButtonActivity extends AppCompatActivity { public static final int MESSAGE_CODE = 8888; private static TextView mTextView; private TestHandler mTestHandler = new TestHandler(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler); /* 发送消息 */ mTextView = findViewById(R.id.handler_text_view); Message message = mTestHandler.obtainMessage(); // 取得一条消息 message.arg1 = 0; message.arg2 = 1; message.what = MESSAGE_CODE; message.obj = 10000; // 延迟发送消息 sendMessageDelayed(消息, 延迟时间) mTestHandler.sendMessageDelayed(message, 1000); } public static class TestHandler extends Handler { @Override public void handleMessage(@NonNull Message msg) { // 处理消息 super.handleMessage(msg); /* 接收消息 */ switch (msg.what) { case MESSAGE_CODE: int value = (int) msg.obj; mTextView.setText(String.valueOf(value/1000)); msg = Message.obtain(); msg.arg1 = 0; msg.arg2 = 1; msg.what = MESSAGE_CODE; msg.obj = value - 1000; if (value > 0) { sendMessageDelayed(msg, 1000); } break; } } }}
6.1.4 新建一个activity_handler.xml布局文件
6.1.5 效果预览