android中的handler使用之四

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中的handler使用之四相关的知识,希望对你有一定的参考价值。

我们知道handler是android中的一个传送机制,可以传送各种各样的消息,使得多线程的使用更加方便。但是我这里说的是,我们还可以利用handler来截断发送的消息。代码如下

xml代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.example.android_handler2.MainActivity" >
 6     <Button 
 7         android:id="@+id/button"
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="@string/button_string"
11         />
12 </LinearLayout>

java代码

 1 package com.example.android_handler2;
 2 
 3 
 4 
 5 
 6 
 7 import android.app.Activity;
 8 import android.os.Bundle;
 9 import android.os.Handler;
10 import android.os.Handler.Callback;
11 import android.os.Message;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.Button;
15 import android.widget.Toast;
16 
17 public class MainActivity extends Activity  implements OnClickListener{
18     private Button button = null;
19     private Handler handler = new Handler(new Callback() {
20         //只要return的是true,就会截断下面的handlerMessage中接的方法
21         public boolean handleMessage(Message msg) {
22             Toast.makeText(MainActivity.this, "1", Toast.LENGTH_LONG).show();
23             return true;
24         }
25     }){
26         public void handleMessage(Message msg) {
27             Toast.makeText(MainActivity.this, "2", Toast.LENGTH_LONG).show();
28             return ;
29         }
30     };
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.activity_main);
34         button = (Button) findViewById(R.id.button);
35         button.setOnClickListener(this);
36     }
37     @Override
38     public void onClick(View v) {
39         handler.sendEmptyMessage(1);
40         
41     }
42 
43 }

运行这个程序我们知道,toast只打印出1,而没打印出2来,因此表明2已经被截断了。

以上是关于android中的handler使用之四的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - 如何从片段中停止 handler.postDelayed?

Android多线程编程之Handler篇(消息机制)

Android之Handler消息传递机制详解zz

Android之Handler消息传递机制详解zz

实验四代码评审

Android中的多线程编程附源代码