文档章节

进程/线程概念和Android异步通讯机制

JouTzaShin
 JouTzaShin
发布于 2013/11/17 16:11
字数 1271
阅读 1.7K
收藏 19

1、操作系统中线程、进程概念

    进程资源分配和调度的独立单位,进程将内存地址空间、程序、数据等资源组织起来,使操作系统容易管理这些资源。


    线程CPU调度和分派的基本单位,线程必须依赖进程而存活,并和其他线程共享依赖的进程的资源。因为线程是独立运行(相对于其他线程而言),所以线程也需要有自己的资源,包括栈、寄存器、状态、程序计时器。线程也和进程一样有、新建、就绪、运行、阻塞、死亡五种状态。

    多线程资源控制,由于线程之间共享进程中的资源,所以同一进程中的多个线程的通讯的重心之一是对共享的资源进行控制,例如当多个线程同时使用进程某个资源时,有可能需要采用互斥/同步等手段保证资源被正确操作,在采用互斥/同步手段时候,需要避免产生死锁的情况。


2、操作系统中 进程/线程通讯概述

    进程之间的通讯(IPC)实质上是不同进程之间线程的通讯。线程之间通讯则一般指的是同一个进程中不同线程(也即是多线程)的通讯。


     1)、进程/线程通讯的目的:1、数据传输 2、共享资源 3、进程控制 4、通知事件

     2)、进程间通讯(IPC)方式:

                1)管道(Pipe),管道是单向的,先进先出,务结构的固定大小的字节流,常用于父子进程的通

                      讯,Socket、流等都是管道的实现方式

                2)信号,用户进程间通讯和同步的原始机制

                3)消息队列,是一个存储消息的链表,允许多个进程向它写/读消息。

                4)共享存储,通常由一个进程维护,其余进程对该内存区域进行读写

                PS:其中的消息队列(Message Queue)和共享内存是Linux的System V IPC 机制中的两种。


3、Android中特有的线程通讯方式的详细描述

    在Android程序中,如果你阻塞一个UI线程多达5秒之后,一般会造成ANR(Application Not Responding)情况的出现,导致程序出现无响应的提示。所以如果要做一些比较耗时的操作,例如与服务器进行数据交互,则需要重开一条线程进行处理。但是随着又引出了一个问题,就是在两条不同的线程之间怎么进行通讯(例如数据传输和通知),例如在一条线程中读取服务器的数据,然后怎么传递该数据给UI线程并通知它更新到界面上去?在android系统里面是利用Handler+MessageQueue+Looper机制来解决同一进程中两个线程间的通讯。实质上也就是,上面所说的操作系统进程间通讯的方式之一消息队列。

接下来从使用该机制和解析该机制是怎么工作的这两个方面来阐述Handler+MeesageQueue+Looper这一通讯机制。


使用该机制:

实质上就是对象的建立和关联)。[PS:以下代码未经过运行,只是为了阐述Handler+MessageQueue+Looper机制]

class ShowAndroidTC  extends Thread{

    public void run(){

        //建立Looper对象并关联到当前线程中,建立Looper的时候,Looper也创建了MessageQueue

          Looper.prepare();

       //建立Handler,在Handler构造器中关联了当前线程的Looper和Looper中的消息队列            

        Handler handler = new Handler(){};//这里省略了重写handleMessage方法

        //循环并开始监听消息队列

         Looper.loop();

    }

}

机制原理解析:

接下来看看该机制怎运行

1、建立一个消息对象(Meesage),并把需要传输的数据存储在该对象中。

2、利用handler,添加该消息对象到消息队列中。在这一步中,Message会关联发送它的Handler对象

3、由于Looper.loop()循环并监听(MessageQueue的queue.next()方法会阻塞Loop),所以监听到有新消息则取出该消息,并根据该消息关联的Handler对象分发消息,并回调该handler对象的handlerMessage(Message msg)方法来处理该消息。

4、消息处理完之后,回收该消息并等待下一条消息(queue.next())。

综上所述,其实传递数据介质利用的是Messge,通知事件利用的是消息分发

PS:括号里面的代码是根据Hanlder、MessageQueue、Message、Looper源代码分析而来。全部类在源代码 android.os包里。

最后,如有本文所述有纰漏或描述不当,甚至有错误,请一定指出,谢谢!

参考文章:

《操作系统中的进程与线程 》

URL:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html

百度百科《进程间的通信》

URL:http://baike.baidu.com/view/1492468.htm

《进程和线程的区别》

URL:http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html




© 著作权归作者所有

上一篇: XML简述和XML使用
下一篇: 电子商务简述
JouTzaShin
粉丝 0
博文 5
码字总数 2899
作品 0
中山
私信 提问
加载中

评论(0)

android基础知识05:四大组件之service 03:实现机制

本文主要介绍service相关内容。包括两篇文章: android基础知识05:四大组件之service 01 android基础知识05:四大组件之service 02:远程调用 android基础知识05:四大组件之service 03:实...

迷途d书童
2012/03/23
399
0
Android IPC进程间通讯机制

一.Linux系统进程间通信有哪些方式? 1.socket; 2.name pipe命名管道; 3.message queue消息队列; 4.singal信号量; 5.share memory共享内存; 二.Java系统的通信方式是什么? 1.socket; ...

Simpleness
2012/06/28
4.3K
0
Android(IPC)进程间通讯1:详解Binder由来?

完整原文:http://tryenough.com/android-ipc1 Android开发的进程间通讯,整个Android的应用都依赖于binder做底层通信机制。而Linux中提供的进程间通讯方式并没有binder机制,那么android中为...

TryEnough
2019/02/22
0
0
Android操作系统面试题

一﹑Android手机操作系统的四层架构? 架构框架以此从上到下: 1.Applications (应用程序(应用层)); Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息...

无鸯
2011/09/05
1.2K
0
Android 进程和线程

Processes and Threads 译者署名: 呆呆大虾 译者微博: http://weibo.com/popapa 版本:Android 3.2 r1 进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运...

阿酷
2011/11/17
1.5W
3

没有更多内容

加载失败,请刷新页面

加载更多

石家庄哪里可以开汽车配件发票-中国-新闻网

石家庄哪里可以开汽车配件发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug B...

18280800244
23分钟前
36
0
石家庄哪里可以开礼品费发票-中国-新闻网

石家庄哪里可以开礼品费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bri...

18281961458
23分钟前
47
0
石家庄哪里可以开运输费发票-中国-新闻网

石家庄哪里可以开运输费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bri...

18281771440
24分钟前
89
0
石家庄哪里可以开办公耗材发票-中国-新闻网

石家庄哪里可以开办公耗材发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug B...

18249436294
24分钟前
37
0
石家庄哪里可以开汽车租赁费发票-中国-新闻网

石家庄哪里可以开汽车租赁费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug...

18249436304
24分钟前
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部