- 浏览: 411552 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
1、其实上面的方法,直接使用handler.post(updateThread),然后线程updateThread直接调用run()方法,并没有调用start()方法,
所以并没有产生新的线程,都是在主线程里面运行的
2、要产生新的线程,可以用如下方法:
//生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供 HandlerThread handlerThread = new HandlerThread("handler_thread"); //必须先调用该类的start(); handlerThread.start();
这样就产生了新的线程,然后可以继承Handler类,生成Handler对象,来控制线程
3、Bundle是键值对,键为string类型,值可以为多种类型,用于Message的setData()中存储数据的,加入数据如下
Bundle b = new Bundle(); b.putInt("age", 20); b.putString("name", "Jhon");
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; public class HandlerTest2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); HandlerThread handlerThread = new HandlerThread("handler_thread"); handlerThread.start(); MyHandler myHandler = new MyHandler(handlerThread.getLooper()); Message msg = myHandler.obtainMessage(); Bundle b = new Bundle(); b.putInt("age", 20); b.putString("name", "Jhon"); msg.setData(b); msg.sendToTarget(); } //继承Handler类, class MyHandler extends Handler{ public MyHandler(Looper looper){ super(looper); } @Override public void handleMessage(Message msg) { Bundle b = msg.getData(); int age = b.getInt("age"); String name = b.getString("name"); System.out.println("age is " + age + ", name is" + name); } } }
此代码在实际运行的过程虽然没有问题,但是如果是想在void handleMessage()方法里刷新
View和控件会报如下错误:
...:only the original thread that created a view hierarchy can touch its views.
这主要是Android的相关View和控件不是线程安全的,我们必须做独立的处理。这里Android给 我们提供了很多方法,今天android开发网说一种简单的方法除了异步任务AsyncTask外使 用Handler可以很好的处理,和Win32的消息很像。
首先我们需要明白,主线程或者这里说的原始线程original thread
一般情况下是UI线程,当然UI线程并不一定是主线程,我们不能长时间的阻塞该应用,在Android平台上可能会产生类似Force
close或Wait这样的对话框这里我们成为ANR,这里除了使用ProgressDialog方式给用一个动态的进度代表当前处理并没有中断可能需要
一些时间,所以告诉大家相关的网络处理可以使用工作者线程,但是worker 线程不能处理显示元素即UI相关的View或
Widget包中的高层的控件,所以通过一个Handler对象可以很好的传递Runnable或Message ,下面我们用一个简单的例子来描述
final Handler handler = new Handler(); new Thread() { public void run() { // list = getData(); //处理得到结果了,这里一些内容保存在主类的成员变量中 handler.post(new Runnable() { public void run() { //这里就可以获得主类中的组件刷新 gallery = (Gallery) findViewById(R.id.galley); gallery.setAdapter(new ImageAdapter(MainActivity.this, listData)); getLoading().dismiss(); } }); // 高速UI线程可以更新结果了 } }.start();
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 600一、代码库 1、from 代码家 整理比较好的源 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 614今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 525手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 759Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 768Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2931Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1078其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1829Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1260原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1202该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 9051.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 911http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5381、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 601<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 953前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 653import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 931JSON的定义: 一种轻量级的数据交换 ... -
AsyncTask的用法-UI刷新发放
2013-07-15 14:50 665在开发Android应用时必须遵守单线程模型的原则: A ... -
java.lang.OutOfMemoryError处理错误
2013-07-15 14:41 671java.lang.OutOfMemoryError异常解决 ... -
关于android.view.WindowLeaked异常的解决方案
2013-07-15 10:34 613Android.view.WindowLeaked按字面了解, ...
相关推荐
//在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建MyHandler的实例对象,会执行MyHandler类中的构造函数 MyHandler ...
`HandlerThread` 是 Android SDK 提供的一个类,它是 `Thread` 的子类,但与普通线程不同的是,`HandlerThread` 在启动时会自动创建一个 `Looper` 对象。`Looper` 是 Android 消息处理机制的核心,它负责在指定线程...
Android HandlerThread使用方法详解 HandlerThread 继承自Thread,内部封装了Looper。 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外...
本文将深入探讨如何使用`HandlerThread`在Android中创建线程,以及为什么相较于直接使用`Thread`类,`HandlerThread`更具有优势。 首先,让我们理解一下`Thread`类的基本使用。通常,我们可以通过创建一个新的匿名...
【Android HandlerThread详解】 HandlerThread在Android开发中扮演着重要的角色,它是一个预先配置好的线程,具有内置的Looper,使得开发者能够在子线程中轻松地处理消息和执行任务。理解HandlerThread的工作原理有...
本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层...
在上面的代码中,我们使用了静态内部类MyHandler来实现Handler的实现类,并在其内部声明了一个WeakReference来引用外部类MyActivity的实例。这可以避免Handler对象对外部类实例的强引用。 为了解决Handler泄漏的...
* 局部变量、类的成员变量、类的成员函数、函数参数:以小写字母开头其他的单词首字母大写,变量名不建议使用下划线分隔单词,建议使用驼峰命名法,Android 的系统类都采用此方法。 * 静态常量:全部大写,单词之间...
import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget...
import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle ...
7. **多线程与并发**:理解线程池、HandlerThread、IntentService以及Android的并发工具类,如Semaphore、CountDownLatch、CyclicBarrier等。 8. **组件化与模块化**:大型项目中,组件化和模块化的实践是提高代码...
2.4.1 使用Bundle / 61 2.4.2 使用文件共享 / 62 2.4.3 使用Messenger / 65 2.4.4 使用AIDL / 71 2.4.5 使用ContentProvider / 91 2.4.6 使用Socket / 103 2.5 Binder连接池 / 112 2.6 选用合适的...
`HandlerThread`是一个继承自`Thread`的类,它的主要特点是内部封装了`Looper`。当我们创建一个`HandlerThread`并调用`start()`方法时,这个线程会启动,并在其`run()`方法中调用`Looper.prepareMainLooper()`初始化...
标题与描述概述的知识点主要集中在Android开发中线程的使用及其相关组件的理解,特别是Thread、Looper、Handler和Message,以及HandlerThread、java.util.concurrent、Task和AsyncTask的应用。以下是对这些知识点的...
- **HandlerThread** 是 Android 提供的一个特殊线程类,它继承自 `Thread` 类,主要用途是在子线程中处理消息。 - **特点**: - 自带 `Looper`,使得可以在子线程中处理消息队列。 - 避免了频繁创建线程带来的...
- **Bundle**:用于携带数据,尤其在Activity间传递数据时使用。 - **Message**:消息对象,通过Handler进行传递。 - **HandlerThread**:一种特殊的线程,有自己的消息队列。 - **Intent**:Intent是Android程序...
- Android App Bundle:新的发布格式,按需下载资源。 - Kotlin:现代的Android开发语言,特性如协程、Anko库等。 - Android安全:权限管理、数据加密、防篡改等。 以上知识点是Android面试中的常见主题,深入...
本文将详细介绍Android中的多线程编程技术,并通过一个简单的计时器案例来帮助理解如何在Android应用中正确地使用多线程。 #### 二、多线程案例——计时器 在这个案例中,我们将创建一个简单的计时器应用,该应用...
- Android App Bundle:减小应用体积的发布格式。 - Kotlin Coroutines:协程处理异步任务,提高代码可读性。 以上知识点是Android面试中常见的主题,深入理解和掌握这些内容将有助于在面试中脱颖而出。此外,...