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"
tools:context="com.example.handler.MainActivity" >
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:visibility="gone"
style="?android:attr/progressBarStyleHorizontal"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start"
android:textSize="20sp"/> </LinearLayout>

源代码:

main1:

package com.example.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
/**
* Handler:安卓提供的异步线程处理方式
*
* Handler的使用
* 创建一个Handler对象
* 调用Handler的post方法,将要执行的线程对象添加到队列当中
* 将要执行的操作写在线程对象当中
* 在Run方法内部执行postDelayed或者post方法实现循环
*
*分析:调用post方法,将要执行的线程对象或消息对象添加到队列当中,然后该方法return,
* Handler中HanderMessage负责接收消息队列中的消息,
* 从而实现异步处理,互不影响
*/
/**
* 例程:
* 利用Handler处理一个进度条
* @author Administrator
*
*/
public class MainActivity extends Activity implements OnClickListener,Runnable { private Button button;
private ProgressBar progressBar ;
private Thread thread;
private int i = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
button.setOnClickListener(this);
thread = new Thread(this);
thread.start(); } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
progressBar.setVisibility(i);
handler.post(thread);//将线程对象加入到线程对象当中
}
//使用匿名内部类来复写Handler当中的handlerMessage方法
Handler handler = new Handler(){
//接收消息队列中的消息
public void handleMessage(Message msg) {
progressBar.setVisibility(msg.arg1);
handler.post(thread);
System.out.println(handler+"....."+Thread.currentThread().getName());
};
};
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Thread.........."+Thread.currentThread().getName());
i = i+10;
//得到一个消息对象,Message类是由安卓操作系统提供
Message msg = handler.obtainMessage();
//将msg对象的arg1参数设置为i,用arg1和arg2成员变量传递消息,优点是新系统性能消耗较少
msg.arg1 = i;
try {
//设置当前线程休眠1S
thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将消息对象加入到消息队列中
handler.sendMessage(msg);
if(i==100){
//在Handler中移除当前线程
handler.removeCallbacks(thread);
} } }

main2:

package com.example.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
/**
* 为了避免启动一个活动处理事件的时间过长导致该活动没有响应,一般我们处理数据量比较大的数据时,会将其分别放置在几个线程里面,实现异步处理数据
* @author Administrator
*
*/
public class MainActivity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
System.out.println("activity-->"+Thread.currentThread().getName());
//生成了一个handlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由安卓应用程序框架提供
//looper会循环从队列中取出消息
HandlerThread handlerThread = new HandlerThread("handler_thread");
//在使用handlerThread.getLooper()方法之前必须先开启线程
handlerThread.start();
//将Handler通过getLooper方法绑定在了调用Looper的线程上
MyHandler handler = new MyHandler(handlerThread.getLooper());
Message msg = handler.obtainMessage();
Bundle data = new Bundle();
data.putString("name", "zhangsan");
data.putInt("age", 20);
msg.obj = "abc";
msg.setData(data);
//将msg发送到目标对象,所谓的目标对象就是生成该msg对象的handler对象
msg.sendToTarget();
}
}
class MyHandler extends Handler{
public MyHandler(){ }
public MyHandler(Looper looper){
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
String obj = (String) msg.obj;
Bundle data = msg.getData();
String name = data.getString("name");
int age = data.getInt("age");
System.out.println(name+"::"+age);
System.out.println("handler-->"+Thread.currentThread().getName());
}
}

Android_Handler的更多相关文章

  1. android_handler(三)

    这篇记录 android 消息机制中,MainThread 向 WorkThread 发送消息.( MainThread → WorkThread ) 步骤: 1.准备looper对象 2.在子线程中 ...

  2. android_handler(二)

    这篇记录 android 消息机制中.WorkThread 模拟向网络訪问数据,获得数据后,返回 message 发送给 MainThread ,并改动 TextView 的 text 的这种一个步骤 ...

  3. android_handler(一)

    仅仅是一个简单的handler的样例,目的就是对handler有一个初步的接触. 在layout上加入一个button,点击按钮,然后打印出利用handler传送的数据.(都是执行在mainthrea ...

  4. Android多线程通信机制

    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...

  5. Android消息机制:Looper,MessageQueue,Message与handler

    Android消息机制好多人都讲过,但是自己去翻源码的时候才能明白. 今天试着讲一下,因为目标是讲清楚整体逻辑,所以不追究细节. Message是消息机制的核心,所以从Message讲起. 1.Mes ...

  6. 【转】Android--多线程之Handler--不错

    原文网址:http://www.cnblogs.com/plokmju/p/android_handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了 ...

  7. Android-消息处理学习总结(Handler,Looper)

    参考资料: http://www.cnblogs.com/qlky/p/5657924.html http://blog.csdn.net/guolin_blog/article/details/99 ...

  8. [转]Android--多线程之Handler

    原文:http://www.cnblogs.com/plokmju/p/android_Handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决 ...

  9. ot

    https://blog.csdn.net/notice520/article/details/8135600 | android中的跨进程通信的实现(一)——远程调用过程和aidl - CSDN博客 ...

随机推荐

  1. java泛型小总结

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...

  2. HDU 5628 Clarke and math Dirichlet卷积+快速幂

    题意:bc round 72 中文题面 分析(官方题解): 如果学过Dirichlet卷积的话知道这玩意就是g(n)=(f*1^k)(n), 由于有结合律,所以我们快速幂一下1^k就行了. 当然,强行 ...

  3. 移动端混合型App(hybrid app)自动化测试选型与实践

    背景 公司产品的业务已经发展到了移动端,开发选型已经结束,决定使用phonegap做移动端的web应用开发平台.考虑到业务的复杂与多样,移动端的测试同样需要自动化.在网上看了很多,最终锁定了3个移动端 ...

  4. WCF SOA --- AJAX 跨域请求处理 CORS for WCF

    一.问题        跨域请求无法处理的问题,由于为了阻止恶意的网站通过JS脚本来窃取正常网站受保护的资源.所由所有的浏览器的默认策略是阻止XmlHttpRequest的跨域的异步请求. 但是对于一 ...

  5. puppet学习:文件夹权限的问题

    之前Zabbix自动部署的文件夹结构总觉得别扭,今天下午抽空调整了下.调整完后,依然是例行的测试. 在客户端执行puppet agent -t时,报错如下: Failed to generate ad ...

  6. iOS7程序后台运行

    介绍 这次 iOS7 对程序后台运行进行了加强,但是仅仅是加强而已,要想像 Android 程序那样自由当然就别想了,苹果这么做主要还是出于电池使用时间考虑,但是这次的加强对大部分程序基本够用. 在介 ...

  7. eclipse 项目报错问题

    所有的问题在windoes-->show view--->Problems里查看

  8. 第一章 :绪论-Twitter数据的收集和处理

    为什么要用twitter,我心里是一万头CNM在飞奔.这个国外的东西很不好访问到的,国内的政策,你懂的,不说这个了,还是想办法翻出去再说吧. 不知道别人都用的什么工具,看到太多的注册就头大,就选了一个 ...

  9. openCV 直方图统计

    直方图显示 #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc ...

  10. CUDA网格限制

    如图