android handler runnable使用实例(关键是内部run中停止)
.java
package com.example.mydemo; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView text_view = null;
private Button start = null;
private Button end = null;
private int count = 0;
// 使用handler时首先要创建一个handler
Handler handler = new Handler();
// 要用handler来处理多线程可以使用runnable接口,这里先定义该接口
// 线程中运行该接口的run函数
Runnable update_thread = new Runnable() {
public void run() {
// 线程每次执行时输出"UpdateThread..."文字,且自动换行
// textview的append功能和Qt中的append类似,不会覆盖前面
// 的内容,只是Qt中的append默认是自动换行模式
// text_view.append("\nUpdateThread...");
text_view.setText(String.valueOf(count++));
// 延时1s后又将线程加入到线程队列中
if (count >= 5) {
// handler.removeCallbacks(update_thread);//用此行停止不行,需要发消息外部停止才可以。不明白?
Message message = new Message();
message.what = 1;
handlerStop.sendMessage(message);
}
handler.postDelayed(update_thread, 1000); }
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); text_view = (TextView) findViewById(R.id.text_view);
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new StartClickListener());
end = (Button) findViewById(R.id.end);
end.setOnClickListener(new EndClickListener());
handler.post(update_thread);
} private class StartClickListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
// 将线程接口立刻送到线程队列中
handler.post(update_thread);
}
} private class EndClickListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
// 将接口从线程队列中移除
count = 0;
handler.removeCallbacks(update_thread);
}
} final Handler handlerStop = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
count = 0;
handler.removeCallbacks(update_thread);
break;
}
super.handleMessage(msg);
} };
}
.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/text_view"
android:layout_width="fill_parent"
android:layout_height="200dip"
android:text="@string/hello_world"
tools:context=".MainActivity" /> <Button
android:id="@+id/start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="start" /> <Button
android:id="@+id/end"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="end" /> </LinearLayout>
android handler runnable使用实例(关键是内部run中停止)的更多相关文章
- android handler工作原理
android handler工作原理 作用 便于在子线程中更新主UI线程中的控件 这里涉及到了UI主线程和子线程 UI主线程 它很特别.通常我们会认为UI主线程将页面绘制完成,就结束了.但是它没有. ...
- [Android]Message,MessageQueue,Looper,Handler详解+实例
转http://www.eoeandroid.com/forum-viewthread-tid-49595-highlight-looper.html 一.几个关键概念 1.MessageQueue: ...
- Android Handler使用实例
本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见.本文分为4个简单的例子来学校handler Handler使用例1 ...
- Android Handler的使用示例:结合源码理解Android Handler机制(一)
什么是Handler? Android 的官方解释: 文档分节1:A Handler allows you to send and process Message and Runnable objec ...
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类(转)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 最近创建了一个群,方便大家交流,群号: ...
- Android Handler 异步消息处理机制的妙用 创建强大的图片载入类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...
- Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue
android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习 google大牛们的设计思想. ...
- Android Handler leak 分析及解决办法
In Android, Handler classes should be static or leaks might occur, Messages enqueued on the applicat ...
- Android Handler 机制总结
写 Handler 原理的文章很多,就不重复写了,写不出啥新花样.这篇文章的主要是对 handler 原理的总结. 1.Android消息机制是什么? Android消息机制 主要指 Handler ...
随机推荐
- C#语言的基础
一.C#的引入 01..net和C#的区别 1)大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标:任何人,在任何地方,使用任何终端设备,都可以访问微软提供的服务. 2).net ...
- CSS级联和继承
2016-11-06 <CSS入门经典>第七章 1.在HTML中使用CSS样式表的三种方式: (1)内联的样式表. eg:<em style="background-whi ...
- css3加载ing动画
项目中ajax交互成功前总会需要给用户提醒,比如请稍候.正在加载中等等,那个等待的动图以前项目中用的是gif,在移动端画质很渣,有毛边,于是在新项目中用css3展示加载中的动画效果. function ...
- go语言 类型:字符串
示例 package main import ( "fmt" ) func main() { var str1 string // 声明一个字符串变量 str1 = "H ...
- css通用小笔记03——浏览器窗口变小 div错位的问题
我最近写网页的时候,经常碰到一个普遍的问题,经过我的查阅和尝试,终于解决了这一问题,这里有两种方法提供给大家,如果博友还有更好的方法,欢迎补充. 一.使用min-width属性: 我们先看看下面这段代 ...
- chrome developer tool—— 断点调试篇
断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...
- C# 获得MP4时长
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Mac平台与Windows平台下AndroidStudio增量升级
Android Studio增量升级什么情况下使用最合适呢? 比如现在的as版本是2.2版本,而你的as版本2.0版本,这个时候点Check For Updates就没有反应了,因为你已经2个有版本没 ...
- OC中的protocol
一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...
- composer快速入门
composer.json 文件内容定义 ====================================================={ "require":{ &q ...