- 浏览: 365755 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
loveskey:
找了好久,可算是找到了。感谢
dx.jar dx.bat -
zhaoyi168:
可以把工程的代码发给我吗?
ZJLN1982@yahoo.co ...
Athrun Demo -
ergodic09:
請問樓主 我目前在porting AR6003但是無法自己產生 ...
009-Android平台开发-WIFI function porting-WIFI功能移植 -
iedj99fei:
...
androi中xliff:g
在android中,一个应用开始运行的时候,系统将创建一个线程名为main,同时也称作UI thread.同一进程中的所有组件都在main线程中创建,并且接收用户的操作.如果阻塞该线程超过5s将弹出ANR对话框。同时android的UI工具包是非线程安全的。
因而有两点必须注意:
1. 不要阻塞UI thread
2. 不要在其它线程中操作UI
也因此推导出两个知识块:
1. 对于需要长时间执行的任务需要启动work thread,在android中启动work thread的方法是什么?
2. 在work thread 如何对UI进行更新和设置
Java传统方法 Thread / Runnable 继承Thread实现run
创建Runnable,实现run,实例作为参数创建Thread
使用Handler进行线程间交互
每一个Handler的实例都与唯一的线程以及该线程的message queue 相关联。
默认情况下handler与创建它的线程相关联,但是也可以在构造函数中传入Looper实例,以绑定到其它线程。
Handler的作用就是将message或runnable对象发送到与之相关联的message queue中,并且从queue中获取他们进行处理。
这就起到了将数据在线程中传递的目的,实现了线程间的交互。
o 对于Handler启动runnable在下面的关于定时和周期性执行中进行详细介绍
o 关联于main线程的handler,实现了帮助work thread 更新UI的目的,在关于在work thread中对UI进行更新和设置中详细介绍
o 为了使handler关联于work thread而非main 线程,需要在构造函数时给定Looper实例
Looper用于执行一个线程的message 循环。通过它handler可以关联上相应的thread及其message queue。默认情况下,thread是没有Looper对象的,需要自己在thread中添加该对象,并调用其 prepare() 和 loop()方法。不考虑同步的情况下简单实现一个有Loop的thread.
其中有2点值得注意:
1. Looper 在调用prepare() 之后才指向当前thread,之前是指向main thread的
2. handler必须在thread调用start方法(运行run)之后才能获取looper,否则为空,因为prepare需要在run方法中调用
o 为了方面使用带有Looper的Thread,android实现了HandlerThread
LoopThread thread1;
public WifiSettings() {
mFilter = new IntentFilter();
mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
handleEvent(intent);
}
};
thread1 = new LoopThread("loopThread");
thread1.start();
mScanner = new Scanner(thread1.MyLooper);
}
class LoopThread extends Thread{
public Looper MyLooper;
public LoopThread(String name) {
super(name);
MyLooper = Looper.myLooper();
Log.w(TAG, "in thread init: loop "
+ MyLooper.getThread().getName()); // main
}
public void run() {
Log.w(TAG, "inthread :" + Thread.currentThread().getName()); // main
Looper.prepare();
MyLooper = Looper.myLooper();
Log.w(TAG, "inthread run: loop " + MyLooper.getThread().getName()); // name
Looper.loop();
}
}
因而有两点必须注意:
1. 不要阻塞UI thread
2. 不要在其它线程中操作UI
也因此推导出两个知识块:
1. 对于需要长时间执行的任务需要启动work thread,在android中启动work thread的方法是什么?
2. 在work thread 如何对UI进行更新和设置
Java传统方法 Thread / Runnable 继承Thread实现run
创建Runnable,实现run,实例作为参数创建Thread
使用Handler进行线程间交互
每一个Handler的实例都与唯一的线程以及该线程的message queue 相关联。
默认情况下handler与创建它的线程相关联,但是也可以在构造函数中传入Looper实例,以绑定到其它线程。
Handler的作用就是将message或runnable对象发送到与之相关联的message queue中,并且从queue中获取他们进行处理。
这就起到了将数据在线程中传递的目的,实现了线程间的交互。
o 对于Handler启动runnable在下面的关于定时和周期性执行中进行详细介绍
o 关联于main线程的handler,实现了帮助work thread 更新UI的目的,在关于在work thread中对UI进行更新和设置中详细介绍
o 为了使handler关联于work thread而非main 线程,需要在构造函数时给定Looper实例
Looper用于执行一个线程的message 循环。通过它handler可以关联上相应的thread及其message queue。默认情况下,thread是没有Looper对象的,需要自己在thread中添加该对象,并调用其 prepare() 和 loop()方法。不考虑同步的情况下简单实现一个有Loop的thread.
其中有2点值得注意:
1. Looper 在调用prepare() 之后才指向当前thread,之前是指向main thread的
2. handler必须在thread调用start方法(运行run)之后才能获取looper,否则为空,因为prepare需要在run方法中调用
o 为了方面使用带有Looper的Thread,android实现了HandlerThread
LoopThread thread1;
public WifiSettings() {
mFilter = new IntentFilter();
mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
handleEvent(intent);
}
};
thread1 = new LoopThread("loopThread");
thread1.start();
mScanner = new Scanner(thread1.MyLooper);
}
class LoopThread extends Thread{
public Looper MyLooper;
public LoopThread(String name) {
super(name);
MyLooper = Looper.myLooper();
Log.w(TAG, "in thread init: loop "
+ MyLooper.getThread().getName()); // main
}
public void run() {
Log.w(TAG, "inthread :" + Thread.currentThread().getName()); // main
Looper.prepare();
MyLooper = Looper.myLooper();
Log.w(TAG, "inthread run: loop " + MyLooper.getThread().getName()); // name
Looper.loop();
}
}
发表评论
-
eclipse中安装插件地址
2014-03-07 15:08 755http://subclipse.tigris.org/up ... -
ubuntu13下载android源码
2014-02-27 18:23 632一、注意repo的正确地址 repo:curl " ... -
用例无法运行,报如下错:Exception during suite construction
2014-02-26 15:47 1264一 前提 1、 测试工程中的所有参数已配置好,如ins ... -
dx.jar dx.bat
2013-06-17 19:33 2255Android SDK中dx.jar, dx.bat文件的备份 ... -
Please ensure that adb is correctly located..... 问题
2013-04-16 09:44 963解决方法: 方法一、查毒杀毒,也许了病毒占用了adb ... -
PC端通过adb与设备端通信
2013-03-28 09:36 1509adb 全称Android Debug Bri ... -
Unable to execute dex: Multiple dex files define Lorg/taptwo/android/widget/Circ
2013-02-21 15:07 2575问题:[2013-02-21 15:01:02 - Dex ... -
android viewTree and decorView
2013-01-30 13:55 1694Android ViewTree and DecorView ... -
No active compatible AVD's or devices found. Relaunch this configuration after c
2013-01-29 10:56 8759问题:No active compatible AVD's ... -
代码对比工具
2013-01-24 15:33 646windows: http://www.scooterso ... -
android最新源码下载
2013-01-23 09:57 1048源码下载:https://source.android.co ... -
Run MonkeyTalk Scripts via Ant in Windows
2012-12-18 20:24 1276Run MonkeyTalk Scripts via ... -
Android中cpu,memory,Battery的计算
2012-11-20 19:59 66101 Memory的分配(RAM而非ROM) 网址: •ht ... -
http://code.taobao.org/p/TMTS/src/
2012-10-12 17:38 1029http://code.taobao.org/p/TMTS/s ... -
string.xml文件中的特殊符号转换符
2012-09-24 09:09 777strings.xml文件中需要对特殊符号(如%,'等)进行转 ... -
web server 中设置wifi代理
2012-09-24 09:07 893DefaultHttpClient httpClient = ... -
Android开发一些常见问题
2012-09-24 09:06 7411:当追踪问题时,代码中实在找不出问题所以,代码的逻辑完全正确 ... -
将log信息写入sdcard
2012-07-05 17:14 869File mFile; private void write ... -
string.xml文件中的特殊符号转换符
2012-06-19 19:39 1050strings.xml文件中需要对特殊符号(如%,'等)进行转 ... -
关于popupWindow的dismiss
2012-06-17 16:13 8585View contentView = LayoutInflat ...
相关推荐
在Android开发中,多线程是一项至关重要的技术,特别是在处理耗时操作时,如网络请求、数据解析等,以避免阻塞主线程导致用户界面(UI)无响应。标题"android——多线程"和描述"android——Handler与多线程应用范例...
这个"Android多线程分段下载源码"实例是一个很好的学习资源,它实现了文件的分块下载,并允许用户自定义线程数来控制下载速度和效率。下面我们将详细探讨这一技术。 首先,我们要理解什么是分段下载。传统的单线程...
在Android平台上,多线程下载机制是提升应用性能和用户体验的关键技术之一,特别是在处理大文件如应用程序、视频或音频资源的下载场景中。通过利用多线程,我们可以将一个大文件分割成多个小部分,然后同时启动多个...
在Android应用开发中,性能优化是一项至关重要的任务,特别是在处理数据加载、网络请求以及大量计算时。本篇文章将深入探讨如何通过实现后台预读线程来优化多线程任务,提高用户界面的响应速度和整体应用体验。 ...
本文将深入探讨Android多线程的相关知识点,基于“android多线程demo(很清晰很详细)”的描述,我们将围绕这个示例进行讲解。 1. **线程基础**: - **主线程**:Android应用的UI线程,负责处理用户交互和更新界面。...
在Android多线程下载过程中,还要注意权限问题,比如需要在AndroidManifest.xml中添加INTERNET权限。此外,考虑到电量和流量消耗,还可以实现下载策略,如限制最大下载速度、夜间模式自动暂停等。 总之,Android多...
在Android开发中,多线程管理是至关重要的技术,它涉及到应用的性能、用户体验以及资源的有效利用。Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应...
在Android开发中,多线程断点下载以及进度实时更新是一项重要的技术,它涉及到网络编程、文件操作和UI更新等多个方面。以下是对这个主题的详细解释: **多线程下载**: 多线程下载是为了提高文件下载速度和效率。...
【Android多线程】\n\n在Android开发中,多线程是不可或缺的一部分,它能够提升应用程序的性能和用户体验。Android系统默认在一个主线程中运行应用程序,包括UI更新,如果在此线程中执行耗时操作,会导致用户界面...
本示例“Android多线程实现简单字符串计数器”旨在教你如何在Android环境中利用多线程来实现一个简单的字符串计数器功能。 首先,我们需要理解Android中的线程模型。主线程,也称为UI线程,负责处理用户界面的更新...
本实例将深入探讨Android多线程的实践应用及理论知识。 首先,我们要理解多线程的基本概念。在单线程环境中,程序按照顺序执行,而多线程则允许多个任务并行运行,提高了系统资源的利用率。Android主线程,也被称为...
在Android开发中,多线程下载是一项常见的任务,它能够有效地利用网络资源并提升用户体验。本文将基于提供的标题“Android 多线程下载简单demo之Thread”和描述,深入讲解如何实现一个简单的多线程下载功能。这个...
1. **Android多线程下载** 在Android中,由于主线程(UI线程)不能执行耗时操作,因此在进行大文件下载时,我们需要使用多线程技术。通常,我们会创建一个后台线程来处理网络请求和文件写入,以避免阻塞UI。使用`...
### Android多线程模型与Service深入解析 #### 线程与进程概念解析 在深入探讨Android中的多线程模型之前,我们先明确一下基本概念。在计算机科学中,**进程**(Process)与**线程**(Thread)是两个核心概念。进程是...
下面我们将深入探讨多线程下载的原理以及如何在Android中实现。 1. **多线程下载原理**: - 多线程下载是指将一个大文件分割成多个小块,每个线程负责下载一个或多个小块。这种方式可以利用多核处理器的优势,同时...
在Android应用开发中,多线程技术是必不可少的,它能让我们在不阻塞用户界面(UI)的情况下执行耗时操作。AsyncTask是Android提供的一种轻量级的异步任务处理框架,它允许开发者在后台线程执行计算,并在UI线程更新...
根据标题《android多线程高效编程》和描述内容,我们可以了解到本书将从基础层面介绍线程和进程的概念,这是Linux内核管理执行流的基本单位,也是Android操作系统多任务处理的核心。然后,书中重点在于介绍Android...
在Android开发中,多线程是一项至关重要的技术,它使得应用程序可以同时执行多个任务,提升用户体验,特别是对于处理耗时操作如网络请求、大数据计算或长时间的UI更新时。本篇将详细介绍四种Android中实现多线程的...
### Android开发中的多线程编程技术详解 #### 一、多线程编程的重要性与挑战 在Android开发过程中,多线程编程技术对于提高应用程序的性能和用户体验至关重要。...希望本文对您理解和应用Android多线程编程有所帮助。
在Android系统中,主线程(UI线程)负责处理用户交互和界面更新,而其他工作线程则用来执行耗时操作,如文件下载,以避免阻塞主线程导致应用无响应。 2. **Android下载管理器**:Android系统自带了一个下载管理服务...