android runnable 停止,Android如何让Handler中内部run停止(runnable/thread)

本文详细介绍了Android中Handler机制的工作原理,通过实例展示了如何使用Handler进行UI更新,并讨论了如何停止线程的执行。文章包含Activity代码和XML布局文件,解释了线程与UI交互的关键步骤,以及按钮启动和结束线程的操作。
摘要由CSDN通过智能技术生成

【声明】此文转载自:http://www.bubuko.com/infodetail-669650.html

——尊重作者,知识无价,交流无限!

一、先看图片,一目了然:

0818b9ca8b590ca3270a3433284dd417.png

二、再看代码,了然于胸:

Activity代码:

package com.example.mydemo;

2

3 import android.app.Activity;

4 import android.os.Bundle;

5 import android.os.Handler;

6 import android.os.Message;

7 import android.view.View;

8 import android.view.View.OnClickListener;

9 import android.widget.Button;

10 import android.widget.TextView;

11

12 public class MainActivity extends Activity {

13 private TextView text_view = null;

14 private Button start = null;

15 private Button end = null;

16 private int count = 0;

17 // 使用handler时首先要创建一个handler

18 Handler handler = new Handler();

19 // 要用handler来处理多线程可以使用runnable接口,这里先定义该接口

20 // 线程中运行该接口的run函数

21 Runnable update_thread = new Runnable() {

22 public void run() {

23 // 线程每次执行时输出"UpdateThread..."文字,且自动换行

24 // textview的append功能和Qt中的append类似,不会覆盖前面

25 // 的内容,只是Qt中的append默认是自动换行模式

26 // text_view.append("\nUpdateThread...");

27 text_view.setText(String.valueOf(count++));

28 // 延时1s后又将线程加入到线程队列中

29 if (count >= 5) {

30 // handler.removeCallbacks(update_thread);//用此行停止不行,需要发消息外部停止才可以。不明白?

31 Message message = new Message();

32 message.what = 1;

33 handlerStop.sendMessage(message);

34 }

35 handler.postDelayed(update_thread, 1000);

36

37 }

38 };

39

40 @Override

41 public void onCreate(Bundle savedInstanceState) {

42 super.onCreate(savedInstanceState);

43 setContentView(R.layout.activity_main);

44

45 text_view = (TextView) findViewById(R.id.text_view);

46 start = (Button) findViewById(R.id.start);

47 start.setOnClickListener(new StartClickListener());

48 end = (Button) findViewById(R.id.end);

49 end.setOnClickListener(new EndClickListener());

50 handler.post(update_thread);

51 }

52

53 private class StartClickListener implements OnClickListener {

54 public void onClick(View v) {

55 // TODO Auto-generated method stub

56 // 将线程接口立刻送到线程队列中

57 handler.post(update_thread);

58 }

59 }

60

61 private class EndClickListener implements OnClickListener {

62 public void onClick(View v) {

63 // TODO Auto-generated method stub

64 // 将接口从线程队列中移除

65 count = 0;

66 handler.removeCallbacks(update_thread);

67 }

68 }

69

70 final Handler handlerStop = new Handler() {

71 public void handleMessage(Message msg) {

72 switch (msg.what) {

73 case 1:

74 count = 0;

75 handler.removeCallbacks(update_thread);

76 break;

77 }

78 super.handleMessage(msg);

79 }

80

81 };

82 }

Xml文件

1

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

7

8 android:id="@+id/text_view"

9 android:layout_width="fill_parent"

10 android:layout_height="200dip"

11 android:text="@string/hello_world"

12 tools:context=".MainActivity" />

13

14

15 android:id="@+id/start"

16 android:layout_width="fill_parent"

17 android:layout_height="wrap_content"

18 android:text="start" />

19

20

21 android:id="@+id/end"

22 android:layout_width="fill_parent"

23 android:layout_height="wrap_content"

24 android:text="end" />

25

26

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆转载请注明出处☞指尖飞落的博客☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值