当前位置:文档之家› Android进程间通信机制(Binder)介绍

Android进程间通信机制(Binder)介绍

Android进程间通信机制(Binder)介绍
Android进程间通信机制(Binder)介绍

Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码。细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我们如何使用Java语言来使用系统的Binder机制来进行进程间通信呢?这就是本文要介绍的Android系统应用程序框架层的用Java语言来实现的Binder接口了。 熟悉Android系统的读者,应该能想到应用程序框架中的基于Java语言的Binder接口是通过JNI来调用基于C/C++语言的Binder运行库来为Java应用程序提供进程间通信服务的了。JNI在Android系统中用得相当普遍,SDK中的Java 接口API很多只是简单地通过JNI来调用底层的C/C++运行库从而为应用程序服务的。 这里,我们仍然是通过具体的例子来说明Binder机制在应用程序框架层中的Java接口,主要就是Service Manager、Server和Client这三个角色的实现了。通常,在应用程序中,我们都是把Server实现为Service的形式,并且通过IServiceManager.addService接口来把这个Service添加到Service Manager,Client也是通过IServiceManager.getService接口来获得Service接口,接着就可以使用这个Service提供的功能了,这个与运行时库的Binder接口是一致的。 前面我们学习Android硬件抽象层时,曾经在应用程序框架层中提供了一个硬件访问服务HelloService,这个Service运行在一个独立的进程中充当Server的角色,使用这个Service的Client运行在另一个进程中,它们之间就是通过Binder机制来通信的了。这里,我们就使用HelloService这个例子来分析Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码。所以希望读者在阅读下面的内容之前,先了解一下前面在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务这篇文章。 这篇文章通过五个情景来学习Android系统进程间通信Binder机制在应用程序框架层的Java接口:1. 获取Service Manager的Java远程接口的过程;2. HelloService接口的定义;3. HelloService的启动过程;4. Client获取HelloService 的Java远程接口的过程;5. Client通过HelloService的Java远程接口来使用HelloService提供的服务的过程。 一. 获取Service Manager的Java远程接口

Android下Camera框架解析

Android 下Camera 构架分析 一. Android Camera 层次结构 Android 下Camera 子系统从上到下可以分为应用层、框架层、运行库层及内核层,其结构如下图所示。从整体上看,它还是属于Android 下典型的client/service 的结构,运行在两个进程中,一个是client 进程,主要包括JA V A 代码与一些Native c/c++代码;另一个是service 进程,属于服务端,是native c/c++代码,并且,camera service 属于Android 系统的一个native 服务,用native c/c++代码实现,主要负责和Linux kernel 中的Camera Driver 交互,搜集Linux kernel 中Camera Driver 上传的数据,并交给显示系统(surface)显示。 client 进程与service 进程通过Binder 机制通信,client 端通过调用service 端的接口实现各个具体的功能。但真正的preview 数据不会通过Binder IPC 机制从service 端复制到client 端,而是通过回调函数与消息的机制将preview 数据buffer 的地址传到client 端,最终可在Java 应用中操作处理这个preview 数据。 android_hardware.camera Camera Apps Libandroid_runtime.so (android_hardware_Camera.cpp) libcamera_client.so (Camara.cpp) 应用层框架层运行库层 硬件层 Libcamera.so (HAL)libcameraservice.so (CameraService.cpp)Linux 内核层 V4L2 Kernel Driver Camera Hardware BinderIPC JNI Client Service 二. Android Camera 的代码结构 1)应用层 Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个

基于Android平台的手机通讯录管理系统

第一章绪论 1.1 项目研究背景 经过多年的发展,随着第三代网络的使用及四代网络的即将来了呢,移动终 端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用 软件和需要的服务将会有很大的发展空间。Google与包括HTC、摩托罗拉、三星、联想等在内的三十多家技术和无线应用的领军企业组成的开发联盟为此于2007年11月退出了一份专为移动设备设计的软件平台——Android OS。 Android 是一套真正意义上的移动性设备综合平台,它包括操作系统、中间 件和一些关键的平台应用。Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,它们有效地优化额Java程序的运行过程。Android 系统平台基于优化了的Linux内核,它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机硬件的连接层。 Abdroid平台的开放性等特点既能促进技术(包括平台本身)的创新,又有 助于降低开发成本,还可以是运营商能非常方便地制定特色化的产品,因此, 它具有很大的市场发展潜力。 1.2 项目研究的目的及意义 随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。 手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手 机功能的不断加强与完善,手机通讯录对于人们的意义,已经不仅仅像记事簿 一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有, 从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展 为名片夹,也就是一个人名下,可以储存座机、手机、单位、地址、电子邮箱 等内容,这种名片夹在电话薄的基础上,大大丰富了内容,同时结构也发生了 革命性的的变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社 会各层认识的喜爱。 1.3系统主要内容与实现方式

Android Binder设计与实现 – 设计篇

Android Binder设计与实现–设计篇 摘要 Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道、system V IPC、socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统 IPC做对比有助于我们深入领会进程间通信的实现和性能优化。 本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求;然后分别阐述Binder在系统不同部分的表述方式和起的作用;最后还会解释Binder在数据接收端的设计考虑,包括线程池管理,内存映射和等待队列管理等。通过本文对Binder的详细介绍以及与其它IPC通信方式的对比,读者将对Binder的优势和使用Binder 作为Android主要IPC方式的原因有深入了解。 1.引言 基于Client-Server的通信方式广泛应用于从互联网和数据库访问到嵌入式手持设备内部通信等各个领域。智能手机平台特别是Android 系统中,为了向应用开发者提供丰富多样的功能,这种通信方式更是无处不在,诸如媒体播放,视音频捕获,到各种让手机更智能的传感器(加速度、方位、温度、光亮度等)都由不同的Server负责管理,应用程序只需作为Client与这些Server建立连接便可以使用这些服务,花很少的时间和精力就能开发出令人眩目的功能。Client-Server方式的广泛采用对进程间通信(IPC)机制是一个挑战。目前linux 支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Server的通信方式。当然也可以在这些底层机制上架设一套协议来实现Client-Server通信,但这样增加了系统的复杂性,在手机这种条件复杂,资源稀缺的环境下可靠性也难以保证。 另一方面是传输性能。socket作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。共享内存虽然无需拷

android开机过程

一、Android开机启动流程简介 1、OS-level: 由bootloader载入linux kernel后kernel开始初始化, 并载入built-in 的驱动程序。Kernel完成开机后,载入init process,切换至user-space。 Init进程是第一个在user-space启动的进程。 2、Android-level: 由init process读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server等。 由 init process 根据硬件类型读取init.xxx.rc。由init.xxx.rc加载init.xxx.sh。 由 init.xxx.sh 加载特定的硬件驱动。如hi_tuner.ko、hi_demux.ko等。 3、Zygote-Mode: Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。 随后,使用者将看到一个桌面环境(Home Screen)。桌面环境由一个名为[Launcher]的应用程序负责提供。 本文档重点研究Android-level中的启动流程。 启动流程如下图所示:

二、init process流程分析 init进程简介 init进程是第一个在user-space启动的进程。由内核启动参数[init]传递给内核,如果该项没有设置,内核会按 /etc/init,/bin/init,/sbin/init,/bin/sh的顺序进行尝试,如果都有的都没找到,内核会抛出 kernel panic:的错误。

Android中的IPC binder机制

android 中的IPC binder 机制 第一部分 Binder的组成 1.1 驱动程序部分驱动程序的部分在以下的文件夹中: kernel/include/linux/binder.h kernel/drivers/Android/binder.c binder驱动程序是一个miscdevice,主设备号为10,此设备号使用动态获得(MISC_DYNAMIC_MINOR),其设备的节点为: /dev/binder binder驱动程序会在proc文件系统中建立自己的信息,其文件夹为 /proc/binde,其中包含如下内容: proc目录:调用Binder各个进程的内容 state文件:使用函数binder_read_proc_state stats文件:使用函数binder_read_proc_stats transactions文件:使用函数binder_read_proc_transactions transaction_log文件:使用函数binder_read_proc_transaction_log,其参数为binder_transaction_log (类型为struct binder_transaction_log) failed_transaction_log文件:使用函数 binder_read_proc_transaction_log 其参数为 binder_transaction_log_failed (类型为struct binder_transaction_log) 在binder文件被打开后,其私有数据(private_data)的类型: struct binder_proc 在这个数据结构中,主要包含了当前进程、进程ID、内存映射信息、Binder 的统计信息和线程信息等。 在用户空间对Binder驱动程序进行控制主要使用的接口是mmap、poll和ioctl,ioctl主要使用的ID为: #define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read) #define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, int64_t) #define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)

android Camera框架分析

Android的Camera系统分析 一、Camera构架分析 Android 的Camera包含取景(preview)和拍摄照片(take picture)的功能。目前Android 发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。Android中Camera模块同样遵循Andorid的框架,如下图所示 Camera Architecture Camera模块主要包含了libandroid_runtime.so、libui.so和libcameraservice.so等几个库文件,它们之间的调用关系如下所示: 在Camera模块的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera 类。 libcameraservice.so是Camera的server程序,它通过继承libui.so中的类实现server的功能,并且与libui.so中的另外一部分内容通过进程间通讯(即Binder机制)的方式进行通讯。 libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在client 调用接口,功能则在server中实现,但是在client中调用就好像直接调用server中的功能,进程间通讯的部分对上层程序不可见。 从框架结构上来看,源码中ICameraService.h、ICameraClient.h和ICamera.h三个类定义了MeidaPlayer的接口和架构,ICameraService.cpp和Camera.cpp两个文件则用于Camera 架构的实现,Camera的具体功能在下层调用硬件相关的接口来实现。 从Camera的整体结构上,类Camera是整个系统核心,ICamera类提供了Camera主要功能的接口,在客户端方面调用;CameraService是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JA V A程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的Bimder来实现进程间的通讯。 二、Camera的工作流程概述: ①.App_main process: 进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数供JVM调用。 AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera", camMethods, NELEM(camMethods)); 其中camMethods定义如下: static JNINativeMethod camMethods[] = { { "native_setup", "(Ljava/lang/Object;)V", (void*)android_hardware_Camera_native_setup }, { "native_release", "()V", (void*)android_hardware_Camera_release },

Android实验报告—网络通信

实验三Android网络通信 实验目的: 本实验的目的是使学生深入了解利用Intent实现进程间的通信过程。学会利用Intent进行Activity的跳转,以及链接网页信息;学会利用Intent将其他Activity 的信息返回到Activity中的方法。体会Activity间通信的过程。 实验要求: 编程实现下述功能:主界面上有一个“登录”按钮和“链接网页”按钮,点击“登录”按钮后打开一个新的Activity;新的Activity上面有输入用户名和密码的控件(如下图所示)点击“链接网页”按钮,新的Activity上面有输入Uri信息的控件,可以链接到相应的网站,在用户关闭这个Activity后,返回到主界面中程序界面如下图所示: [实现提示] 1、建立Android工程,其中 工程名称:WebCommunication579 包名称:https://www.doczj.com/doc/be779669.html,.bistu.dj1001. WebCommunication579 Activity名称:WebCommunication579 2、工程建立完毕后,首先进行界面设计,建立相应的子Layout界面

3、在工程中添加相应的.java文件,处理各个Activity的事件响应 4、在Manifest中添加新建的Activity信息,进行注册。 程序源码: 主界面java文件代码: package cn.deu.bistu.dj1001.WebCommunication579; import android.app.Activity; import android.content.Intent; import https://www.doczj.com/doc/be779669.html,.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class WebCommunication579 extends Activity { private Button btnLogin,btnGoToWeb; private TextView show; private static final int SUBACTIVITY1 = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/be779669.html,yout.main); btnLogin=(Button) findViewById(R.id.btnLogin); btnGoToWeb=(Button) findViewById(R.id.btnGoToWeb); show=(TextView) findViewById(R.id.A1show); btnLogin.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity1.class); startActivityForResult(intent, SUBACTIVITY1); }}); btnGoToWeb.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity2.class); startActivity(intent); }}); } protected void onActivityResult(int requestCode, int

安卓课后习题与答案培训讲学

安卓课后习题与答案

(1)习题: 1.简述各种手机操作系统的特点。 答案: 目前,手机上的操作系统主要包括以下几种,分别是Android、iOS、Windows Mobile、Windows Phone 7、Symbian、黑莓、PalmOS和Linux。 (1)Android是谷歌发布的基于Linux的开源手机平台,该平台由操作系统、中间件、用户界面和应用软件组成,是第一个可以完全定制、免费、开放的手机平台。Android底层使用开源的Linux操作系统,同时开放了应用程序 开发工具,使所有程序开发人员都在统一、开放的开发平台上进行开发,保证了Android应用程序的可移植性。 (2)iOS是由苹果公司为iPhone、iPod touch、iPad以及Apple TV开发 的操作系统,以开放源代码的操作系统Darwin为基础,提供了SDK,iOS操作系统具有多点触摸操作的特点,支持的控制方法包括滑动、轻按、挤压和旋转, 允许系统界面根据屏幕的方向而改变方向,自带大量的应用程序。 (3)Windows Mobile是微软推出的移动设备操作系统,对硬件配置要求较高,一般需要使用高主频的嵌入式处理器,从而产生了耗电量大、电池续航时间短和硬件成本高等缺点,Windows Mobile系列操作系统包括Smartphone、Pocket PC和Portable Media Center。随着Windows Phone 7的出现,Windows Mobile正逐渐走出历史舞台。 (4)Windows Phone 7具有独特的“方格子”用户界面,非常简洁,黑色背景下的亮蓝色方形图标,显得十分清晰醒目,集成了Xbox Live游戏和Zune音乐功能,可见Windows Phone 7对游戏功能和社交功能的重视。

“进程android.process.acore已意外停止”解决办法大全

“进程android.process.acore已意外停止”解决办法大全 一般我们在操作手机的时候,遇到出现的比较多的系统问题是出现“进程android.process.acore已意外停止”的提示。下面针对比较常出现的情况提供解决的办法。 一、三星的机子升级4.0.3后 兴致勃勃的刷机,但成功后总是FC,郁闷至极。但恢复出厂设置就没问题,刚开始以为是程序冲突,后来发现并不是这样,清空通讯录也可以正常使用。 解决方法:设置——应用程序管理——将google通讯录同步、联系人存储、通讯录这三项清除数据,注意先备份。之后再设置——账户与同步——登陆google账户同步联系人即可。 二、刷机的时候因为失误操作,弹出了“android.process.acore出问题”的提示,重刷也无法解决。 出现这个提示不用担心,并不是手机出了毛病。“android.process.acore出问题“的解决的方法很简单。 解决方法:请先备份一下手机的联系人资料,然后进入设置,选择程序,选择程序管理,选择全部,找到联系人储存,然后清除数据,这样再刷机就没有问题了。某些手机显示的是“进程android.process.acore已意外停止”,解决方法是一样的。 三、小米手机出现了“android.process.acore ”的情况 如果是小米手机出现了“android.process.acore出问题”的提示,有可能是因为你删除了谷歌框架内重要的文件。 解决方法:请到小米官网上下载一个对应的升级包,然后放到SD卡内,选择系统更新,点击菜单键,选择安装包,找到你放入到SD卡中的安装包,选择立即更新,开始升级。等到升级完成后,重启手机,即可解决这个问题。

android体系架构

android 平台大的方面的层次可以划分成三个层次,包括一个操作系统,中间件和应用程序,android 的系统框架图如下: 图中的软件层次自上而下分成4个层次 应用程序(Application) 用用程序框架(Application Framework) 各种类库(Libraries)和android运行时(Android Runtime) 操作系统(OS) 一.应用程序(Application) 应用层是和用户交互的一个层次,用户可以看得见的一些应用,用户可以操作。这类应用基本都是通过Java语言编写的独立的能够完成某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browers)等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序,普通开发人员要做的事情就是开应用层的程序提供该广大消费者使用。 二.应用程序框架(Application Framework)

普通开发者可以使用Android基本应用程序使用的系统API,android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好的更轻松的开发出优秀的android应用。开发过程中常用到的基本框架组件如下: 一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表)等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就是提供一种服务,通过这种服务应用程序之间可以实现数据的互相访问和共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。 Resource Manager 顾名思义就是资源管理,android中的资源很多包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都是通过Resource Manager来统一进行管理。 Notification Manager(消息通知管理),它在不影响用户正常操作和使用设备的时候在状态栏上提供消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的看到。 Activity Manager(活动管理),Activity管理着应用程序的生命周期,并且控制着应用的导航,扮演控制器的角色。每个Activity类似于Windows应用中的一个wendow。一般的应用都是通过一个个Activity交互构成的。 Window Manager(窗口管理),管理所有启动的窗口。 Location Manager(位置管理),用来管理地图服务的相关功能。 Telephoney Manager(电话管理),用来管理有关的电话的相关功能。 Package Manager(包管理),管理所有的安装在android系统内的应用程序。 三.库(Libraries)和运行环境(RunTime) 这部分内容开始涉及底层,开发普通的应用不会直接对这个层进行操作。这层中包含了一组类库(Libraries)和运行时(RunTime), 系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它是专门为基于嵌入式Linux的设备定制的。 媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及回放和录制,同时支持静态图像文件。编码格式包括:MPEG4、H.264,MP3、AAC、AMR、JPG、PNG。 Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。SGL 底层的2D图形引擎。 OPENGL|ES,基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的3D软加速。 FreeType,位图(bitmap)和适量(vector)字图显示支持。 SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。 Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。 Dalvik VM,android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。 四、操作系统(OS)

SEAndroid安全机制中的进程安全上下文关联分析模板

SEAndroid安全机制中的进程安全上下 文关联分析 前面一篇文章分析了文件安全上下文关联过程。但是在SEAndroid中,除了要给文件关联安全上下文外,还需要给进程关联安全上下文,因为只有当进程和文件都关联安全上下文之后,SEAndroid安全策略才能发挥作用。也就是说,当一个进程试图访问一个文件时,SEAndroid 会将进程和文件的安全上下文提取出来,根据安全策略规则,决定是否允许访问。本文就详细分析SEAndroid的进程安全上下文的关联过程。 在传统的Linux系统中,每一个应用程序都对应有一个可执行文件。在这种情况下,我们就可以在安全策略中设定一个规则:当一个可执行文件加载到一个进程中执行时,该进程的安全上下文就设置为指定的值。也就是说,我们可以在安全策略中静态地为进程设置安全上下文。然而,这种进程安全上下文设置方式不适合于Android系统中的应用程序进程。从前面和这两篇文章可以知道,Android系统中的应用程序进程都是由Zygote进程fork出来。这些应用程序进程被Zygote进程fork出来之后,不像传统Linux的应用程序进程一样,会通过exec系统调用将对应的可执行文件加载起来执行。这样就会使得Zygote进程及其创建的所有应用程序进程对应的可执行文件均为/system/bin/app_process。由于我们却需要给不同的应用程序设置不同的安全上下文,以便给它们赋予不同的安全权限,因此我们需要在应用程序进程创建出来之后动态地设置它的安全上下文。 根据上面的描述,我们就总结出,在SEAndroid安全机制中,进程的安全上下文设置分为静态和动态两种方式,如图1所示: 接下来,我们就分别描述这两种进程安全上下文设置方式。 1. 为独立进程静态地设置安全上下文 Android系统的第一个进程是init,其它所有的进程都是由init进程直接或者间接fork 出来的。我们在前面一篇文章提到,一个新创建的文件的安全上下文在默认情况下来自于其父目录。与此类似,一个新创建的进程的安全上下文在默认情况下来自于其父进程。因此,我们就先看看系统中的第一个进程init的安全上下文是如何设置的。

android中线程与线程进程与进程之间如何通信

1. Android中进程与进程、线程与线程之间如何通信? 1)一个Android 程序开始运行时,会单独启动一个Process。 默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。 默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。 2)一个Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。 3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response) 一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了? 【答】每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。 Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity 才有机会与用户交互。 原文地址:Android中的进程与线程原文作者:江鹏 当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程: 1、进程 组件运行于哪个进程中由清单文件控制。组件元素——,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID 且被分配了同样的权限。元素也有process属性,为所有的组件设置一个默认值。 所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。

Android的Camera架构介绍

Android的Camera架构介绍 第一部分Camera概述 Android的Camera包含取景器(viewfinder)和拍摄照片的功能。目前Android发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。 以开源的Android为例,Camera的代码主要在以下的目录中: Camera的JA V A程序的路径: packages/apps/Camera/src/com/android/camera/ 在其中Camera.java是主要实现的文件 Camera的JAVA本地调用部分(JNI): frameworks/base/core/jni/android_hardware_Camera.cpp 这部分内容编译成为目标是libandroid_runtime.so。 主要的头文件在以下的目录中: frameworks/base/include/ui/ Camera底层库在以下的目录中: frameworks/base/libs/ui/ 这部分的内容被编译成库libui.so。 Camera服务部分: frameworks/base/camera/libcameraservice/ 这部分内容被编译成库libcameraservice.so。 为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用video for linux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库libcameraservice.so调用。

2 第二部分 Camera 的接口与架构 2.1 Camera 的整体框架图 Camera 的各个库之间的结构可以用下图的表示: libui.so libcameraservice.so Camera 硬件库 libandroid_runtime.so JAVA 程序 Camera.java 进程间通讯 JAVA 调用关系 调用Camera 客户端 在Camera 系统的各个库中,libui.so 位于核心的位置,它对上层的提供的接口主要是Camera 类,类libandroid_runtime.so 通过调用Camera 类提供对JA V A 的接口,并且实现了android.hardware.camera 类。 libcameraservice.so 是Camera 的服务器程序,它通过继承libui.so 的类实现服务器的功能,并且与libui.so 中的另外一部分内容则通过进程间通讯(即Binder 机制)的方式进行通讯。 libandroid_runtime.so 和libui.so 两个库是公用的,其中除了Camera 还有其他方面的功能。 Camera 部分的头文件在frameworks/base/include/ui/目录中,这个目录是和libmedia.so 库源文件的目录frameworks/base/libs/ui/相对应的。 Camera 主要的头文件有以下几个: ? ICameraClient.h ? Camera.h ? ICamera.h ? ICameraService.h ? CameraHardwareInterface.h

Android双应用进程工控方案

Android双应用进程工控方案(二) ------Android双应用进程Demo程序设计 英创公司 2017年12月 Android是移动设备的主流操作系统,近年来越来越多的工业领域的客户开始关注基于Android操作系统的设备在工控领域的应用。鉴于Android是基于Linux内核的事实,我们发展了一种以双应用进程为特色的Android工控应用方案,并在ESM6802工控主板上加以实现。具体说来,就是在Linux平台上运行一个直接操作硬件接口的控制通讯管理进程,为保证运行效率,该进程采用C/C++语言编写(以下简称C进程或控制进程);另一方面在Android平台采用标准Java语言编写一个人机界面进程(以下简称Java进程)。底层的控制进程并不依赖与上层的Java进程而独立运行,两个进程之间通过本地IP进行通讯,控制进程处于服务器侦听模式,Java进程则为客户端模式。本方案的主要优点是客户可以直接继承已有的现成应用程序作为底层控制进程的基础,仅仅增加标准的Socket侦听功能,即可快速完成新的底层应用程序的设计。而界面的Java程序,由于不再涉及具体的工控硬件接口,属于单纯的Android程序,编程难度也大大降低。 设计Android双应用进程Demo程序的目的就是验证“双应用进程”Android工控应用方案的可行性,同时起到一个抛砖引玉的作用。本设计文档将具体讲解设计思路,约束通信协议和接口。 一、总体描述 总体要求如下: 采用C/S(客户端/服务端)模式,通过socket连接,通信需要自定义通信协议; 客户端使用Java语言开发,主要是人机交互,查询以及简单的设置功能; 服务端使用C/C++语言开发,主要是各个功能模块的业务逻辑正常运行,以及接收处理客户端的人机交互请求; 服务端各个功能模块的业务逻辑部分始终正常运行,客户端连接与否,不影响各个模块 1 / 11

第六章_Android进程间通信

第六章Android进程间通信 这篇文章讲介绍Android框架层提供的一些通信机制Broadcast、Intent、Content Provider,主要用于应用程序开发时提供跨进程或应用程序内部的通信,优点是接口简单,使用方便,但使用时可能有一些局限性,比如性能和返回数据。这些机制底层可能依赖Binder、ASH机制,对于库和框架层的开发人员来说也会更多的用到底层的机制,这些内容会放在另一篇《Android内核驱动》中介绍。 6.1 Broadcast Receiver 什么是Broadcast 在android中,通过广播(broadcast)可以通知其他广播接受者某个事件发生了。比如电源不足,信号不好等。首先,我们看一个简单的demo,该demo实现了一个自定义broadcast。 发送端这个activity中创建了一个按钮,当按钮被按下的时候通过sendBroadcast()发送一个

Android中是如何实现Broadcast机制 Broadcast机制是基于一种注册方式的,Broadcast Receiver将其特征描述并注册在系统中。根据注册时机,可以分为两类,网上有人称之为冷注册和热注册。 ●冷注册,就是Broadcast Receiver的相关信息写在配置文件中,系统会负责在相关事件 发生的时候及时通知到该Broadcast Receiver。这种模式适合于这样的场景:某事件发生-> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶属于这种模式。 ●热注册,顾名思义,注册这样的事情都是由应用自己来处理的,通常是在OnResume事 件中通过registerReceiver进行注册,在OnPause等事件中通过unregisterReceiver反注册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,一款优秀的词典软件,可能会有在运行期间关注网络状况变化的需求,使其可以在有廉价网络的时候优先使用网络查询词汇,在其他情况下,首先通过本地词库来查词。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用-> 监听事件-> 发生时进行处理。 前面的Demo中用的就是冷注册。热注册的code如下: registerReceiver,unregisterReceiver的内部实现,可以参考 frameworks/base/services/java/com/android/server/am/ActivityManagerService.java。 除了接收消息的一方有多种模式,发送者也有很重要的选择权。通常,发送者有两类: ●系统本身,Android定义了一组的Standard Broadcast Actions,称为系统Broadcast消息, 参考https://www.doczj.com/doc/be779669.html,/reference/android/content/Intent.html。 ●自定义应用通过的接口Context.sendBroadcast或Context.sendOrderedBroadcast也可以 发送Broadcast。前者发出的称为Normal broadcast,所有关注该消息的Receiver,都有

相关主题
文本预览
相关文档 最新文档