handler+looper传值更改activity的UI

博客开了一段时间,一直想写点自己的学习经验及体会,等着以后长时间不用再要用到的时候直接拿过来上手。想了想,之前用到handler,

看了几篇文章感觉不是很详细。今天就来讲讲handler。

android用handler传值更改UI有两个目的:一、从用户体验方面考虑,把繁杂的操作和计算过程放到其他线程,是主线程(用户界面)更

加的流畅,减少出现卡顿现象。

二、确保线程安全,只有主线程能更改UI;

利用handler传值,需要创建looper对象(系统在创建主线程(activity)的时候,在activity内部封装了一个looper对象,即看不到新建

looper对象),系统会为每个looper创建an一个消息队(messagequene),通过handler的sendmessage方法发送消息给该looper的消息

队列,然后在该线程中,handler会从消息队列中取出message,通过message.what来判断接收的message进行什么操作(更改该线程的ui等)。

如果你想在其他的线程里面进行操作之后发message给UI线程改变UI,就必须要确保你的handler发送的消息必须发送到该UI线程的消息队列(messagequene),

最简单的办法就是使用UI线程的handler进行发送message(即sendmessage),下面说两种方法使操作的线程获得UI线程的handler:

一、在操作线程中:Handler  handler=MainActivity.handler;如果你要更改UI,就要在MainActivity里面

定义一个handler属性并且要是静态的(static),这样把handler的实例化最好放在oncreact方法里面

(当然,handler实例化可以放在类里面的任何地方),在handler的实例化对象里面重写 handleMessage(Message msg)

方法,在handleMessage方法里面进行接收消息并进行操作改变UI。

二、定义一个有handler属性的类,在类里面添加get和set方法用来获取和实例化handler;

下面看代码吧:

UI线程

public class MainActivity extends DroidGap {

public static Handler handler;

@Override
public void onCreate(Bundle savedInstanceState) {
// Be sure to call the super class.
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 100) {
//这里面写代码更改UI
} else if (msg.what == 101) {
//这里面写代码更改UI
} else if (msg.what == 102) { } }

操作类:

public boolean add(JSONArray json) {
try {
JSONArray jsonArray=json.getJSONArray(0);
JSONObject jsonObject= (JSONObject) (jsonArray.get(0));
final PrintItem printItem=new PrintItem(jsonObject.getString("product"),jsonObject.getInt("count"),jsonObject.getInt("price"));
list.add(printItem);
handler=MainActivity.handler;
Message message=new Message();
message.what=100;
message.obj=printItem;
handler.sendMessage(message);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

随感一:android handler传值更改ui的更多相关文章

  1. Android handler Thread 修改UI Demo

    /********************************************************************** * Android handler Thread 修改U ...

  2. Android Handler传值方式

    前面介绍handler的时候,也用到过几种传值方式,今天来总结一下,并且重点说一下bundle方式,代码如下: package com.handlerThread; import android.ap ...

  3. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...

  4. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

    目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+L ...

  5. android Handler介绍

    Handler使用介绍: Handler根据接收的消息,处理UI更新.Thread线程发出消息,通知Handler更新UI. Handler mHandler = new Handler() {  p ...

  6. Activity调用静态方法改变UI,使用Handler来改变UI显示

    本人菜鸟,请各位多多指点,不足之处,请斧正.没啥技术含量,就权当丰富下mono for android的小代码. Activity调用静态方法改变UI using System; using Andr ...

  7. Android Handler的使用示例:结合源码理解Android Handler机制(一)

    什么是Handler? Android 的官方解释: 文档分节1:A Handler allows you to send and process Message and Runnable objec ...

  8. 学习通过Thread+Handler实现非UI线程更新UI组件

    [Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则 ...

  9. [Android]Handler的消息机制

    最经面试中,技术面试中有一个是Handler的消息机制,细细想想,我经常用到的Handler无非是在主线程(或者说Activity)新建一个Handler对象,另外一个Thread是异步加载数据,同时 ...

随机推荐

  1. linux笔记:shell编程-文本处理命令

    cut(字段提取命令,也叫列提取命令): printf(格式化输出命令): awk(awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理): sed(sed是一个很好 ...

  2. [HTML/HTML5]3 页面结构

    在HTML5之前,主要的容器元素是div元素,但在HTML5中提供了数种其它容器元素供我们使用. 因此,当组织Web页面结构时,首先使用HTML将内容分成多部分,然后在对其使用CSS应用样式和格式. ...

  3. 教你9个提升 Wordpress 网站安全性的方法

    大约一个月前,这个部落格被黑客入侵(编按:Amit Agarwal 的网站).而其他托管于相同主机商的网站像是 ctrlq.org 和2hundredzeros.com 也深受其害,黑客成功从网路上拿 ...

  4. CentOS7 yum 安装git

    1.查看系统是否已经安装git git --version 2.CentOS7 yum 安装git yum install -y git 3.安装成功 4.卸载git yum remove git

  5. 读javascript高级程序设计00-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  6. 限制textarea输入内容长度(多浏览器兼容、鼠标操作可控)

    限制textarea的输入内容长度,当从键盘输入,内容长度达到最大值时,只有输入Backspace.Delete.左移动.右移动有效,当用鼠标粘贴内容,则只保留最大值长度的内容.从而控制textare ...

  7. C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结

    前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Sep ...

  8. P53 T5

    北京某高校可用的电话号码有以下几类:校内电话号码由4位数字,第1位数字不是0:校外电话又分为本市电话和外地电话两类,拔校外电话需先拔0,若是本市电话则再接着拔8位数字(第一位不是0),若是外地电话则拔 ...

  9. python 邮件

    1:文件形式的邮件 01.#!/usr/bin/env python3 02.#coding: utf-8 03.import smtplib 04.from email.mime.text impo ...

  10. bzoj4213: 贪吃蛇

    题意:给定一个网格,有一些格子是障碍不用管,剩余的是空地,你要用一些起点和终点在边界上的路径或环来完全覆盖掉空地,如果使用第一种,会付出1的代价,求最小代价,不能覆盖则输出-1. 现在看到网格而且数据 ...