- 浏览: 392321 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (397)
- 随笔 (2)
- java (44)
- android (129)
- html + css (18)
- php (35)
- linux (2)
- html5技术/游戏 (3)
- 其他 (30)
- MAC (2)
- IOS (11)
- mongoDB (0)
- js + jquery (29)
- SQL (5)
- ecshop (2)
- jsp (1)
- mybatis (1)
- 推荐 (0)
- 网络推广 (1)
- jquery mobiles (7)
- Sencha Tcouch (11)
- case (2)
- joomla (1)
- cocos2d (1)
- AndEngine (1)
- 错误异常报错 (1)
- 第三方&二次开发 (5)
- cordova (5)
- swift (81)
- mysql (1)
- zepto (2)
- 常用代码 (1)
最新评论
-
wu1238:
2c2ab98030fc767cf89051f369a97c5 ...
Swift -> UILable 设置内边距 UIEdgeInsets , UITextField 设置内边距
Handler 存在 2 个队列, 一个是线程Runnable , 一个是消息Message,
Handler 的作用 可以把 线程 排进 列队中, 然后 先进 先出,
其中 Handler handler = new Handler();
是操作 线程,比如 启动 handler.post(线程) , 杀死 handler.removeCallbacks(线程)
在线程中(Runnable) 可以做 线程中的具体实现某种功能的全部过程,
比如下面这个 是 将 进度条 每 10 秒 前进一次
public class HandlerActivity extends Activity { /** Called when the activity is first created. */ private Button b_start; private ProgressBar bar_1; private int i=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b_start = (Button)findViewById(R.id.bu_start); bar_1 = (ProgressBar)findViewById(R.id.bar_1); b_start.setOnClickListener(new StartButtonListener()); bar_1.setMax(100); } Handler handler = new Handler(); //管理 线程,执行线程 class StartButtonListener implements OnClickListener{ public void onClick(View v) { // TODO Auto-generated method stub handler.post(updateThread); //启动线程 } } // java 实现 多线程 使用的 Runable 类 线程的具体功能 Runnable updateThread = new Runnable() { public void run() { // TODO Auto-generated method stub i = i + 10; bar_1.setProgress(i);//设置进度条的进度值 // 重复延迟 1000 启动 线程 undateThread handler.postDelayed(updateThread, 1000); if(i == 100){ Toast.makeText(HandlerActivity.this, "进度条已经到100了", Toast.LENGTH_LONG).show(); handler.removeCallbacks(updateThread); //去掉 线程 } } }; }
--------------------------------------------------------------------------------
然后是 message 调用的是 handler 里面的 handleMessage 方法
Handler updateHandler = new Handler(){ public void handleMessage(Message msg) { //干些什么呢 //bar_1.setProgress(msg.arg1); //updateHandler.post(updateThread); // 执行了Runnable updateThread }; };
//从updateHandler获得/关联msg 对象 但 没有执行 updateHandler Message msg = updateHandler.obtainMessage();
msg.arg1 = i; //给msg 的 arg1 变量 赋值
//将msg 的值 压入 到 updateHandler 中, 并 执行 updateHandler 一次 updateHandler.sendMessage(msg);
try { // 等待 3000 毫秒 Thread.sleep(3000); }catch (InterruptedException e) { // TODO: handle exception e.printStackTrace(); }
android.os.Process.killProcess(android.os.Process.myPid());
可以杀死 线程, 防止 即便通过 removeCallbacks 线程还在后台跑
或者 用 System.exit(0)
当然这样做的话 整个 程序 也 finish 掉了
有一点 handler 在在 主 线程中 执行 , 如果要新建线程 要使用 handlerThread 或者 new Thread
Thread t = new Thread(updateThread);
t.start();
作用 的话 替换掉 handler.post(updateThread); 就不用这个了。
------------------------------------------------------------------------------------------------------------------------------
HandlerThread: (循环从队列中处理消息的类,并新建线程)
其中 getLooper 返回一个关联的线程(handlerthread) 的循环 队列
其实 就是 先新建一个 handlerThread , 就是相当 新建了线程, 然后再 新建一个handler 使用 之前新建的handlerthread ,
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("Activity thread id = " + Thread.currentThread().getId()); //新建handlerthread 线程 HandlerThread newthread = new HandlerThread("handler_thread"); newthread.start(); //新建hander Handler hander = new Handler(newthread.getLooper()){ @Override //声明handlemessage public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); //取得bundle Bundle receiveBundle = msg.getData(); int age = receiveBundle.getInt("age"); String name = receiveBundle.getString("name"); System.out.println("Activity thread id = " + Thread.currentThread().getId()); System.out.println("Name = " + name + " , Age = " + age); } }; Message msg = hander.obtainMessage(); //关联Message // 新建budnle 并赋值 Bundle bundle = new Bundle(); bundle.putInt("age", 20); bundle.putString("name", "Jhon"); msg.setData(bundle); msg.sendToTarget(); //传值给 handerMessage 并 启用 hander->handleMessage }
发表评论
-
android -> ImageButton 内部图片 padding
2020-04-09 12:00 361先给 ImageButton 设置属性 andr ... -
android -> 设置 全局 字体样式
2017-05-05 11:11 721首页在AndroidManifest.xml中 ap ... -
android -> 背景background - shape的使用
2017-05-04 12:09 852shape用于设定形状,可以在selector, ... -
android -> 只保留一边 的 边框 border
2017-05-03 09:05 1025设置background <layer-li ... -
android -> 在布局中动态添加view的两种方法
2017-04-29 19:48 956转自 : http://b ... -
android -> 修改 version 版本
2017-03-28 15:33 398除了在 manifest.xml 里面 <?xml ... -
android -> viewPaer 页面滑动
2017-03-27 17:23 506MainActivity.java public ... -
android -> 获取系统输入法列表/已勾选/默认
2017-03-26 13:02 1160参考: http://www.aichengxu. ... -
android -> android 一个 textview 设置不同的字体大小和颜色
2017-03-24 00:05 855参考: http://blog.csdn.net/fengy ... -
android -> 查看 签名 的 信息 包括 有效期
2017-03-23 11:27 1011C:\Windows\system32>D ... -
android -> 父控件 遍历 子 控件
2017-03-21 21:03 686布局文件: <LinearLayout an ... -
android -> 动画类( Animation)
2017-03-19 11:01 498参考: https://my.oschina.net/u/ ... -
android -> TextView setTextSize(int unit, float size) -- px,sp,dip
2017-03-18 23:35 1019TextView setTextSize(int unit, ... -
android -> canvas学习3 (跟随手势画直线)
2017-03-10 17:17 919DiyView.java package com ... -
android -> canvas学习2(动态画图)
2017-03-10 16:31 585关键字 invalidate() 重新执行onDra ... -
android -> canvas学习1
2017-03-10 14:39 460参考: http://blog.csdn.net/lee5 ... -
android -> 九宫格 划直线解锁
2017-03-09 22:53 410来自 : http://blog.csdn.net/ ... -
android -> 按钮 圆角 & 边框 & 渐变
2017-02-14 16:32 868参考: http://blog.csdn.net/l ... -
android -> 资源文件 反编译
2017-02-14 15:30 341官方网站 : https://ibotpeaches ... -
android -> 按钮双击
2017-02-12 11:48 440long space_last_click_time; ...
相关推荐
android handler runnable使用实例(关键是内部run中停止)
在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...
android demo,使用Runnable和Handler的特性实现每个3s的定时器
博客展示地址:http://blog.csdn.net/icedcap/article/details/20076615
本篇文章是对在Android中Handler Runnable与Thread的区别进行了详细的分析介绍,需要的朋友参考下
Looper、Handler与HandlerThread相关概念与简介
主要对handler 、message机制进行了详解,如果想了解更多android相关知识,可以去我博客看看
HandlerThread handlerThread = new HandlerThread("handler_thread"); //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建...
android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。
以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……
Android应用源码之HandlerMessage1_HandlerMessage
消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...
android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。
对于Android的Message机制主要涉及到三个主要的类,分别是Handler、Message、Looper;首先对每个类做一个简单介绍;然后再介绍所谓的Android的Message机制是如何实现的,最后给了一个示例。
* 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启...
Android ,Handler,Looper,Message
自己使用资源; 自己理解:1、给线程传参数;2、可处理多线程
,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...
主要介绍了Android中Handler与Message的简单实例的相关资料,这里提供实例来说明线程Handler与message 的结合使用,需要的朋友可以参考下
android 中Handler 的几种写法,很简单的demo,大神简单修改下,用的是Handler.Callback,的方法