android中的handler使用之三

Posted

tags:

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

我们知道,handler可以可以发送Runnable的消息,同时他也可以发送Message的消息。代码如下

xml代码

 1 <RelativeLayout 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     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.example.android_handler.MainActivity" >
10 
11     <TextView
12         android:id="@+id/textview"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/hello_world" />
16 
17 </RelativeLayout>

java代码

 1 package com.example.android_handler;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.Message;
 7 import android.widget.TextView;
 8 
 9 public class MainActivity extends Activity {
10     private TextView textview = null;
11     private Handler handler = new Handler(){
12         public void handleMessage(android.os.Message msg) {
13             textview.setText("" +msg.obj);
14         };
15     };
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         textview = (TextView) findViewById(R.id.textview);
21         new Thread(){
22             public void run() {
23                 //这个方法可以回收系统中已经存在的message
24                 Message message = Message.obtain();
25                 /*
26                  * 这个也是
27                  * Message message = handler.obtainMessage
28                  */
29                 
30                 
31                 //obj可以用于传递多种对象
32                 message.obj = "123";
33                 handler.sendMessage(message);
34             };
35         }.start();
36     }
37 }

 

 

同时,前面我们知道,利用handler可以在一个imageview中实现图片的轮播,但是如果我们想要让图片轮播结束,主要是运用handler, 因为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     android:orientation="vertical"
 6     tools:context="com.example.android_handler1.MainActivity" >
 7     <ImageView 
 8        android:id="@+id/imageview"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         />
12     <Button 
13         android:id="@+id/button"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:text="@string/button_string"
17         />
18 
19 </LinearLayout>

java代码

 1 package com.example.android_handler1;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.util.Log;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 import android.widget.ImageView;
11 
12 public class MainActivity extends Activity implements OnClickListener {
13     private Handler handler = new Handler();
14     private ImageView imageview = null;
15     private MyRunnable runnable = new MyRunnable();
16     private Button button = null;
17     //创建图片数组
18     private int images[]={R.drawable.image1, R.drawable.image2,R.drawable.image3};
19     //创建一个索引 用于记录当前图片的下标
20     private int index = 0;
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         imageview = (ImageView) findViewById(R.id.imageview);
26         button = (Button) findViewById(R.id.button);
27         button.setOnClickListener(this);
28         new Thread(){
29             public void run() {
30                 //第一个参数是传入一个Runnable的对象
31                 //第二个参数表示的意思是每张图片显示的时间
32                 handler.postDelayed(runnable, 1000);
33             };
34         }.start();
35         
36         
37     }
38     //创建一个MYRunnable类, 用于操作imagevie上的图片
39     class MyRunnable implements Runnable
40     {
41 
42         public void run() {
43             index++;
44             index = index % 3;
45             imageview.setImageResource(images[index]);
46             handler.postDelayed(runnable, 1000);
47         }
48         
49     }
50     public void onClick(View v) {
51         //利用handler移除runnable,实现停止图片的轮播
52         handler.removeCallbacks(runnable);
53         
54     }
55 }

 

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

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

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

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

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

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

Linux/Android——input_handler之evdev