Android ——Handler相关

Posted 柒寒

tags:

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

layout文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="com.hanqi.testapp2.PractiseActivity4"
11     android:orientation="vertical">
12 
13     <TextView
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:id="@+id/tvw1"/>
17     <TextView
18         android:layout_width="match_parent"
19         android:layout_height="wrap_content"
20         android:id="@+id/tvw2"/>
21 
22     <Button
23         android:layout_width="wrap_content"
24         android:layout_height="wrap_content"
25         android:id="@+id/btt1"
26         android:text="随机选择"
27         android:onClick="btn_onClick"/>
28     <TextView
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:text="接受的消息"
32         android:id="@+id/tv_5"/>
33     <Button
34         android:layout_width="match_parent"
35         android:layout_height="wrap_content"
36         android:text="发消息"
37         android:onClick="btn2_onClick"/>
38     <TextView
39         android:layout_width="wrap_content"
40         android:layout_height="wrap_content"
41         android:text="10"
42         android:id="@+id/tv_6"
43         android:layout_gravity="center"/>
44     <Button
45         android:layout_width="match_parent"
46         android:layout_height="wrap_content"
47         android:text="增加"
48         android:onClick="btn3_onClick"
49         android:id="@+id/bt_3"/>
50     <Button
51         android:layout_width="match_parent"
52         android:layout_height="wrap_content"
53         android:text="减少"
54         android:onClick="btn3_onClick"
55         android:id="@+id/bt_4"/>
56     <Button
57         android:layout_width="match_parent"
58         android:layout_height="wrap_content"
59         android:text="暂停"
60         android:onClick="btn3_onClick"
61         android:id="@+id/bt_5"/>
62 </LinearLayout>

java类:

  1 package com.hanqi.testapp2;
  2 
  3 import android.os.Bundle;
  4 import android.os.Handler;
  5 import android.os.Message;
  6 import android.support.v7.app.AppCompatActivity;
  7 import android.view.View;
  8 import android.widget.Button;
  9 import android.widget.TextView;
 10 
 11 public class PractiseActivity4 extends AppCompatActivity {
 12 
 13     TextView tvw1;
 14     Button btt1;
 15     TextView tvw2;
 16     TextView tv_5;
 17     TextView tv_6;
 18     Button bt_3;
 19     Button bt_4;
 20     Button bt_5;
 21     //定义Handler
 22     Handler h = new Handler(){
 23         @Override
 24         public void handleMessage(Message msg) {
 25             super.handleMessage(msg);
 26             //处理消息
 27             if (msg.what ==1)
 28             {
 29                 String m = msg.obj.toString();
 30                 tv_5.setText(tv_5.getText()+" "+m);
 31             }
 32             else if (msg.what ==2)
 33             {
 34                 tv_5.setText(tv_5.getText()+"空消息");
 35             }
 36         }
 37     };
 38 
 39     int i = 10;
 40     Handler hl = new Handler()
 41     {
 42         @Override
 43         public void handleMessage(Message msg) {
 44             super.handleMessage(msg);
 45             switch (msg.what)
 46             {
 47                 case 1:
 48                     if (i ==20)
 49                     {
 50                         return;
 51                     }
 52                     i++;
 53                     tv_6.setText(i + "");
 54                     //发送
 55                     hl.sendEmptyMessageDelayed(1, 1000);
 56                     hl.removeMessages(2);
 57                     bt_3.setEnabled(false);
 58                     bt_4.setEnabled(true);
 59                     bt_5.setEnabled(true);
 60                     break;
 61                 case 2:
 62                     if (i ==0)
 63                     {
 64                         return;
 65                     }
 66                     i--;
 67                     tv_6.setText(i+"");
 68                     hl.sendEmptyMessageDelayed(2, 1000);
 69                     hl.removeMessages(1);
 70                     bt_3.setEnabled(true);
 71                     bt_4.setEnabled(false);
 72                     bt_5.setEnabled(true);
 73                     break;
 74                 case 3:
 75                     hl.removeMessages(1);
 76                     hl.removeMessages(2);
 77                     bt_3.setEnabled(true);
 78                     bt_4.setEnabled(true);
 79                     bt_5.setEnabled(false);
 80                     break;
 81             }
 82         }
 83     };
 84 
 85     @Override
 86     protected void onCreate(Bundle savedInstanceState) {
 87         super.onCreate(savedInstanceState);
 88         setContentView(R.layout.activity_practise4);
 89         tvw1 = (TextView)findViewById(R.id.tvw1);
 90         btt1 = (Button)findViewById(R.id.btt1);
 91         tvw2 = (TextView)findViewById(R.id.tvw2);
 92         tv_5 = (TextView)findViewById(R.id.tv_5);
 93         tv_6 = (TextView)findViewById(R.id.tv_6);
 94         bt_3 = (Button)findViewById(R.id.bt_3);
 95         bt_4 = (Button)findViewById(R.id.bt_4);
 96         bt_5 = (Button)findViewById(R.id.bt_5);
 97     }
 98     //三个按钮
 99     public void btn3_onClick(View v)
100     {
101        switch (v.getId())
102        {
103            case R.id.bt_3:
104                //发送增加消息
105                hl.sendEmptyMessage(1);
106                break;
107            case R.id.bt_4:
108                hl.sendEmptyMessage(2);
109                break;
110            case R.id.bt_5:
111                hl.sendEmptyMessage(3);
112                break;
113        }
114     }
115     //发消息
116     public void btn2_onClick(View v)
117     {
118         //启动线程
119         new Thread(){
120             @Override
121             public void run() {
122                 //发送消息
123                 //1.创建Message
124                 Message m = Message.obtain();
125                 m.what = 1;//id
126                 m.obj = "新信息";
127                 //2.发送即时消息
128                 h.sendMessage(m);
129                 m = Message.obtain();
130                 m.what = 1;//id
131                 m.obj = "新信息";
132                 //发送延时消息
133                 h.sendMessageDelayed(m,2000);
134                 h.sendEmptyMessage(2);
135                 h.sendEmptyMessageDelayed(2,1000);
136             }
137         }.start();
138     }
139 
140 //    String c1 = "北京";
141 //    String c2 = "上海";
142 //    public void btn_onClick(View v)
143 //    {
144 //        //创建子线程1
145 //       new Thread(){
146 //           @Override
147 //           public void run() {
148 //               for (int i=0;i<20;i++)
149 //               {
150 //                   if(i%2==0)
151 //                   {
152 //                     c1="";
153 //                   }
154 //                   else
155 //                   {
156 //                     c1="北京";
157 //                   }
158 //                   runOnUiThread(new Runnable() {
159 //                       @Override
160 //                       public void run() {
161 //                           tvw1.setText(c1);
162 //                       }
163 //                   });
164 //                   //暂停
165 //                   try {
166 //                       Thread.sleep((int) (Math.random()*1000));
167 //                   }
168 //                  catch (Exception e)
169 //                  {
170 //
171 //                  }
172 //               }
173 //               runOnUiThread(new Runnable() {
174 //                   @Override
175 //                   public void run() {
176 //                       Toast.makeText(PractiseActivity4.this, c1 + "循环完成", Toast.LENGTH_SHORT).show();
177 //                   }
178 //               });
179 //           }
180 //       }.start();
181 //        //创建子线程2
182 //        new Thread(){
183 //            @Override
184 //            public void run() {
185 //                for (int i=0;i<20;i++)
186 //                {
187 //                    if(i%2==0)
188 //                    {
189 //                        c2="";
190 //                    }
191 //                    else
192 //                    {
193 //                        c2="上海";
194 //                    }
195 //                    runOnUiThread(new Runnable() {
196 //                        @Override
197 //                        public void run() {
198 //                            tvw2.setText(c2);
199 //                        }
200 //                    });
201 //                    //暂停
202 //                    try {
203 //                        Thread.sleep((int) (Math.random()*1000));
204 //                    }
205 //                    catch (Exception e)
206 //                    {
207 //
208 //                    }
209 //                }
210 //                runOnUiThread(new Runnable() {
211 //                    @Override
212 //                    public void run() {
213 //                        Toast.makeText(PractiseActivity4.this, c2 + "循环完成", Toast.LENGTH_SHORT).show();
214 //                    }
215 //                });
216 //            }
217 //        }.start();
218 //    }
219 }

 

效果为:

以上是关于Android ——Handler相关的主要内容,如果未能解决你的问题,请参考以下文章

什么时候可以在android中使用强引用,这个代码是否泄漏?

Android ——Handler相关

Android Handler相关面试题你能答对多少?子线程和主线程是如何切换的?

Android 中 Handler 相关的面试问题分析

android中handler使用应该注意的问题(解决由handler引起的OOM内存泄漏)

与android线程相关的looper、handler等术语是啥?这些类有啥关系? [关闭]