使用Handler管理线程(转)

步骤:

1. 申请一个Handler对象

Handler handler = new Handler();

2. 创建一个线程

{继承Thread类或者实现Runnable这个接口}

使用Runnable创建一个内部匿名类对象updateThread(要复写run方法)

3. 使用handler的post方法将线程加入到线程队列中

handler.post(updateThread);

4. 使用handler的removeCallbacks方法移出updateThread线程

注意:如果线程从线程队列中出来被执行后,则队列中就不在有线程

因此如果线程在被执行后没有方法将其再次加入到队列中,则无需使用removeCallbacks

线程走出线程队列有两种情况:

一种是被执行,此时要执行run方法

一种是使用removeCallbacks方法,此时线程不被执行,因此不调用run

5. 使用handler的postDelayed方法延时将线程加入到队列中

handler.postDelayed(updateThread,3000)

以下代码是MainActivity.java中的代码

package com.example.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity {
//声明两个按钮控件
private Button StartButton = null;
private Button EndButton = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
StartButton = (Button)findViewById(R.id.StartButton);
StartButton.setOnClickListener(new StartButotnListener());
EndButton = (Button)findViewById(R.id.EndButton);
EndButton.setOnClickListener(new EndButtonListener());
} class StartButotnListener implements OnClickListener{ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.post(updateThread);
}
} class EndButtonListener implements OnClickListener{ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.removeCallbacks(updateThread);
}
}
//创建一个Handler对象
Handler handler = new Handler();
//将要执行的操作下载线程对象的run方法当中
Runnable updateThread = new Runnable(){ public void run(){
System.out.println("UpdateThread");
//在run方法内部,执行postDelayed或者是post方法
handler.postDelayed(updateThread,3000);
}
};
}

以下代码是activity_main.xml中的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" > <Button
android:id="@+id/StartButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start"
/> <Button
android:id="@+id/EndButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="End"
/> </LinearLayout>

Android学习笔记——Handler(一)的更多相关文章

  1. Android学习笔记--Handler用法总结

    不错的例子:http://www.cnblogs.com/menlsh/archive/2013/06/07/3125341.html 转自:一叶知秋的博客 http://blog.sina.com. ...

  2. Android学习笔记——Handler(二)

    对比请看http://blog.sina.com.cn/s/blog_78c913e30100uqmf.html 以下代码是MainActivity.java中的代码 package com.exam ...

  3. 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...

  4. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

  5. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  6. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  7. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

随机推荐

  1. c#模拟表单POST数据,并获取跳转之后的页面

    直接看代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  2. easyui-datagrid 报错:TypeError: col is null

    一般是由于设置的属性用到的列,如: idField:'aa', sortName:'bb' 等在 columns:[[{field:'cc',width:80,title:'列cc'}, {field ...

  3. mysql-case ... when...then...else...end处理判断赋值机制

    then jrkp else zrspj end ))/(case zrspj then jrkp else zrspj end ) zdf from hqxg order by zdf LIMIT ...

  4. Msyql-检测数据库版本

    show variables like '%version%'; 数据库版本结果: "protocol_version","" "version&qu ...

  5. Eclipse中使用SVN

    1.在Eclipse里下载Subclipse插件   方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help --> Eclipse Ma ...

  6. 【USACO 2.2】Subset Sums (DP)

    N (1 <= N <= 39),问有多少种把1到N划分为两个集合的方法使得两个集合的和相等. 如果总和为奇数,那么就是0种划分方案.否则用dp做. dp[i][j]表示前 i 个数划分到 ...

  7. iOS进度条显示

    一.实现下载文件进度控制 1.代码示例 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 @p ...

  8. C++强制类型转换操作符 const_cast

    const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转 ...

  9. Android Studio上面最好用的插件

    转载:http://www.jianshu.com/p/d76b60a3883d 在开发过程中,本人用的最爽的就是代码生成的插件,帮助我们自动完成大量重复简单的工作.个人也觉得代码自动生成工具是最值得 ...

  10. 【CQOI2016纯净整合】BZOJ-4519~4524 (6/6)

    感觉CQOI的难度挺好的,比较贴近自身,所以拿出来做了一下 CQOI2016 Day1 T1:不同的最小割 涉及算法:最小割/分治/最小割树 思路: 最小割树裸题,直接分治最小割,记录下答案,最后排序 ...