通常我们在处理耗时任务时候都会通过新建线程来处理,当任务处理完后通过Handler将结果发送回主线程。比如下面示例:

 package com.example.testlistener;

 import java.util.Timer;
import java.util.TimerTask; import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity {
EditText txt;
final Handler hander = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 0x1234){
Toast.makeText(MainActivity.this, msg.arg1 + "", 1000).show();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Timer().schedule(new TimerTask() {
int i = 0;
@Override
public void run() {
i++;
Message msg = new Message();
msg.what = 0x1234;
msg.arg1 = i;
hander.sendMessage(msg);
}
}, 0, 2000);
} }

  那么,我们能不能通过Handler从主线程发送消息给子线程呢?答案是肯定的,需要用到Looper.prepare()和Looper.loop()。如下面的代码:

 public class MainActivity extends Activity {
EditText txt;
Button bt;
TestThread testThread;
int j = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (EditText) findViewById(R.id.txt);
bt = (Button) findViewById(R.id.bn);
testThread = new TestThread();
testThread.start();
bt.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
j++;
Message msg = new Message();
msg.what = 0x1000;
msg.arg1 = j;
testThread.thander.sendMessage(msg);
}
}); } //自定义子线程
class TestThread extends Thread{
public Handler thander;
@Override
public void run() {
//创建一个Looper对象
Looper.prepare();
thander = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 0x1000){
System.out.println("j = " + msg.arg1);
//txt.setText(msg.arg1 + "");
}
}
};
//启动Looper
Looper.loop();
}
} }

最新文章

  1. PyCharm不能自动import解决方法_PyCharm cannot auto import package troubleshooting
  2. 2.Android 自定义通用的Item布局
  3. cocoapod 安装
  4. 【Oracle】Oracle锁表处理
  5. java.util.ConcurrentModificationException 解决办法(转)
  6. C primer plus 读书笔记第五章
  7. [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888
  8. MQTT和paho(一)
  9. 单片机I/O口的结构的详解
  10. mongodb千万级写入怎么优化
  11. ubuntu下nodejs开发环境搭建
  12. QString和char字符串数组之间的转换 (转)
  13. work notes
  14. MyBatis_注解式开发
  15. 「模板」「讲解」Treap名次树
  16. Python: 去掉字符串中的非数字(或非字母)字符
  17. Oracle SET UNUSED的用法
  18. naginx安装入门
  19. kahadb设计
  20. Netbackup用于技术支持的问题报告(报障模版)

热门文章

  1. JAVA通信系列一:Java Socket技术总结
  2. Spring Boot -- 配置切换指南
  3. .NET 基础 一步步 一幕幕[运算符、占位符、转义符]
  4. [大数据之Yarn]——资源调度浅学
  5. Atitit 动态按钮图片背景颜色与文字组合解决方案
  6. 应用OpenMP的一个简单的设计模式
  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
  8. webService学习之路(二):springMVC集成CXF快速发布webService
  9. Storm介绍及与Spark Streaming对比
  10. 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)