文档章节

Android开发多线程实现方法

ZHXIA
 ZHXIA
发布于 2014/12/08 22:27
字数 559
阅读 22
收藏 0

1 概述

在开发Android 应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。

如果在新开的线程中需要对UI进行设定,就可能违反单线程模型,因此android采用一种复杂的Message Queue机制保证线程间通信

Android是单线程模型,意味着android ui操作并水是线程安全的,并且这些操作必须在UI线程中执行,所以你单纯的new一个thread是不行的,因为这违背了android的单线程模型,怎样用好多线程呢

原则 : 所有可能耗时的操作都放在其它线程去处理。

2 Android几种多线程的实现方式(四种)

A 、Activity.runOnUiThread(Runnable)  
B、View.post(Runnable) ;View.postDelay(Runnable , long)  
C、Handler  
D、AsyncTask 

AsyncTask是Android框架提供的异步处理的辅助类,它可以实现耗时操作在其他线程执行,而处理结果在Main线程执行,对于开发 者而言,它屏蔽掉了多线程和后面要讲的Handler的概念。你不了解怎么处理线程间通讯也没有关系,AsyncTask体贴的帮你做好了。使用他你会发 现你的代码很容易被理解,因为他们都有一些具有特定职责的方法,尤其是AsyncTask,有预处理的方法onPreExecute,有后台执行任务的方 法doInBackground,有更新进度的方法publishProgress,有返回结果的方法onPostExecute等等,这就不像post 这些方法,把所有的操作都写在一个Runnable里。不过封装越好越高级的API,对初级程序员反而越不利,就是你不了解它的原理。当你需要面对更加复 杂的情况,而高级API无法完成得很好时,你就杯具了。所以,我们也要掌握功能更强大,更自由的与Main线程通讯的方法:Handler的使用。

3 总结

A 、Android系统是单线程系统,为了实现多线程的效果,采用message queue

B、 为了实现多线程,可采用runOnUiThread, handler , AsyncTask , post 技术实现


© 著作权归作者所有

ZHXIA
粉丝 1
博文 87
码字总数 40896
作品 0
石景山
程序员
私信 提问
Android:关于多线程的总结知识都在这里了!

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录

Carson_Ho
05/22
0
0
Android多线程:IntentService使用教程(含实例讲解)

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将手把手教你使用(含实例介绍)。 目录 /** 在构造函数中传入线程名字 /** 复写onHandleIntent()方法 根据 Inte...

Carson_Ho
05/20
0
0
这是一份全面 & 详细的Android多线程知识总结指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录 1. 多线程基础知识 在了解Android多线程实现...

Carson_Ho
今天
0
0
Android多线程:这是一份全面 & 详细的HandlerThread学习指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的机制的学习指南,内容包括:定性认知、定量使用、工作原理 & 源码分析,希望你们会喜欢。...

Carson_Ho
05/16
0
0
Android开发中高效的数据结构

android开发中,在java2ee或者android中常用的数据结构有Map,List,Set,但android作为移动平台,有些api(很多都是效率问题)显然不够理想,本着造更好轮子的精神,android团队编写了自己的a...

IamOkay
2014/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式架构 实现分布式锁的常见方式

一、我们为什么需要分布式锁? 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制...

太猪-YJ
41分钟前
3
0
GitLab Docker 安装记录

安装环境 环境Centos7.4 64 1.拉取镜像文件 docker pull gitlab/gitlab-ce:latest 2.docker 安装 git.zddts.com 为访问域名或换成可以访问的IP docker run -d --hostname git.***.com -p ......

侠者圣
今天
0
0
部署kubernates dashboard

参考官方文档: https://github.com/kubernetes/dashboard 直接部署官方默认的dashboard: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/r......

猫海豚
今天
0
0
Docker中Redis的安装

一、下载镜像 docker pull redis 二、创建外挂目录及配置 mkdir /opt/docker/redismkdir /opt/docker/redis/confmkdir /opt/docker/redis/data 三、安装 docker run -d --name compose_r......

闊苡訆涐囍醣
今天
0
0
JNI内存泄露处理方法汇总

在c++中new的对象,如果不返回java,必须用release掉,否则内存泄露。包括NewStringUTF,NewObject。如果返回java不必release,java会自己回收。   jstring jstr = env->NewStringUTF((*p)....

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部