Linux C++工程师2小时了解Android记录

(一)Android?

Andoid是一个在linux上的,多用于移动终端的操作系统,不是类似redhat的服务器OS,也不是类似Windows的标准桌面OS,只是一种手持设备的较为简单的图形OS,Android应用程序使用Java开发。Android从linux kernel开出的分支,比如我的华为手机android是4.3,使用的linux kernel是3.4。

android代码已经被linux kernel社区剔除。android由于继承了linux kernel代码,根据linux GPL规定即对开源代码的任何修改,都必须开源,所以android开源了。同时android属于ASL许可证,ASL许可证规定可以随意使用代码不用开源,所以android上的应用程序和驱动程序都似乎闭源的,这也满足了很多硬件厂商的要求。

与Liinux嵌入式开发使用系统调用和glibc接口不同的是,Android没有glibc的支持,自己使用BionicLibc库。并且,按照移动终端OS的需求提炼出了自己的一套接口,开发人员在Android接口上开发,Android接口就是我们下面提到的一系列java基础类库。

额外的一个问题:为什么android使用了linux内核:

答:回答这个问题需要先了解内核的作用,内核提供了进程管理/文件网络管理/系统安全权限管理等。内核对上层操作者是不可见的,只能针对提供出来的操作接口进行操作。所以内核对整个系统来说是基础性的,不是功能性的。

借用知乎上的话,开发一个内核不难,难在成千上万的设备为他做驱动。Apple和Windows有独立的自有硬件或者有能力说服硬件厂商为之作驱动,但是android开发之初,只能选择Linux。

(二)Android的应用组件

Android应用程序没有为应用准备一个单独的程序入口(比如说,没有main方法),而是为系统依照需求实例化提供了基本的组件。共有四种类型的组件:

Activity:一个应用程序可以有一个或多个activity,每个用户界面都是以activity为基类的子类。Activity生命周期包含active/pause/stop,android会对组件的生命周期作管理,会在系统需要内存时候自动销毁stop的Activity组件。

Service:后台服务可以在后台做一些文件处理网络处理等,将结果提供给需要的activity使用,每个服务都继承Service类。服务运行于应用进程的主线程内,耗时服务会使用新县城执行。

BroadcastRecvice:广播消息接收类,用于接收广播消息并作出处理的组件,很多广播消息源于系统代码比如时区的改变,电池电量低,拍摄了照片或者改变了语言选项。

Intent:消息组件,用于各个组件之间的消息传递。

Android的线程是以标准的Java Thread对象创建的。

Android有一个轻量级的远端过程调用(RPC)机制,既在本地调用一个方法,在远程处理然后将结果返回。

(三)Android对Linux kernel的增强

android对kernel的增强主要体现在对Linux kernel驱动的增强。Android将设备驱动提到Userspace中,不继承在内核中。

1)OpenBinder框架的驱动,用于提供Android平台的进程间通信IPC功能,代码在drivers/staging/android/binder.c

2)Android电源管理,一个基于标准Linux电源管理系统的轻量级Android电源管理系统。

3)低内存管理器:比OOM机制更加灵活,可以根据需要杀死进程以释放需要的内存。drivers/staging/android/lowmemkiller.c

4)匿名共享内存(Ashmem)为进程提供大块的共享内存,同时也提供管理和回收这个内存的机制。

5)Physical MEM:向用户提供连续的物理内存空间。

6)Android Logger:轻量级的日志设备

7)Android Alarm:定时器的android定制/

8)Yaffs2文件系统。

时间: 2024-08-04 01:03:35

Linux C++工程师2小时了解Android记录的相关文章

联想北研实习生面试-嵌入式Linux研发工程师

8月中旬暑假去联想北研参加了实习生面试,面试职位是嵌入式Linux研发工程师.投完简历第二天,主管回复我邮件,意思是说随时来面试,到北研时候给他打个电话就行.于是我回复条短信表示感谢,并约好时间第二天上午9点半到. 进入北研里面,感觉环境还可以,绿绿的,还有水.赶紧打听B座在哪里,一会儿主管把我带上3楼一个临时小桌子休息的地方.面试开始. 首先,是自我介绍.我先拿出一份简历给他,然后自己说了2分钟左右,没一点啰嗦.然后他问了我项目的事,因为之前做过软件的项目,负责了很多工作,他也没问特仔细,就说

Linux 虚拟机根分区磁盘扩充空间记录

博主:Centos6.5 64 位 VM 11 起因:想让VM11里的Linux虚拟机全屏显示,想支持虚拟机与物理机之间的无缝复制粘贴功能.安装vmware tools 导致空间不足,出现如下 网上查找后发现解决方法: yum remove gnome-power-manager yum install gnome-power-manager 执行后出现: 提示是空间不足 进行查看: 果然,空间利用100% 问题转向: 1.为何使用如此之快? 2.如何扩充? 问题1: 此为根目录,安装的东西都在

Android记录17-sdk更新、Eclipse下查看源码、chm文档提供等干货

Android记录17-sdk更新.Eclipse下查看源码.chm文档提供等干货 本篇博客分享一些Android开发者提高开发效率的一些干货,之从Google被和谐了之后,Android开发者可谓痛不欲生,只能通过翻墙的方式去查看官网,sdk更新不了,无法下载源码等问题就出现了,作为一位有追求的Android开发者,不可能只满足于使用sdk这种初级技能了,提高开发效率和代码质量是每位开发者应该去追求的,下面小巫整理总结了一些解决方案供各位参考,让Android开发变得高大上一些. sdk更新

Android记录一个setTextColor常见的一个bug

今天写代码 一不小心就犯了个错误.仔细检查才发现,仅记录一下,防止各位同学犯同样的错误哦 代码如下: remote.setTextColor(summaryId, R.color.news_have_read); 如上,代码无论如何都不能正常显示颜色.只好换成如下代码: remote.setTextColor(summaryId,0xfdfdfdfd); 总不能写颜色值多麻烦..还是写的color.xml中吧. 最后才发现应该这样写才最对. remote.setTextColor(summary

linux.linuxidc.com - /2011年资料/Android入门教程/

本文转自 http://itindex.net/detail/15843-linux.linuxidc.com-%E8%B5%84%E6%96%99-android Shared by Yuan 用户名与密码都是www.linuxidc.com linux.linuxidc.com - /2011年资料/Android入门教程/ [转到父目录] 2011年7月16日 21:33 <目录> Android 3D 游戏开发教程 2011年8月18日 13:26 <目录> Android

在Linux下adb连接不上android手机的终极解决方案

转自: http://blog.csdn.net/liuqz2009/article/details/7942569 1.做android开发的过程,碰到了Linux下adb识别不了android设备的问题,刚开始在网上google下,发现都是针对ubuntu下的一些说明:如google提供的方法:http://developer.android.com/tools/device.html,但发现通过做这些还是有些android设备连接不上,于是通过阅读adb源码,得出了一些方法,和大家一起共勉

Android记录22-关于开发中账号绑定的逻辑处理

Android记录22-关于开发中账号绑定的逻辑处理 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要跟大家分享的是开发中我们常常遇到的账号绑定的功能开发,我们先来思考几个问题: 1. 为什么要有账号绑定? 2. 它跟第三方登录有什么不同? 3. 如何来处理账号绑定的相关逻辑? 好,带着这三个疑问,我们来为我们的应用开发账号绑定的功能.给大家看看一个效果图: 前面分享过关于第三方登录.分享的实现的博文:http://blog.c

Android记录程序崩溃Log写入文件

将导致程序崩溃的堆栈调用Log写入文件,便于收集bug.在调试安卓程序,由于某些原因调试时手机不能连接PC端,无法通过IDE查看程序崩溃的Log,希望log能够写入文件中,对于已经发布的App可以通过该功能收集Bug. 01import java.io.FileNotFoundException; 02import java.io.FileOutputStream; 03import java.io.IOException; 04import java.io.PrintStream; 05imp

Android记录25-WebView实现离线缓存阅读

Android记录25-WebView实现离线缓存阅读 前言 本篇博客要实现的是一个离线下载和离线阅读的功能,这是很多阅读类app都常见的一个功能,典型的应用就是网易新闻.什么是离线下载?其实这个概念是比较模糊,是离线之后下载呢,还是下载之后离线,但稍微有点脑子的人都知道没有网络之后怎么下载呢?所以离线下载这个功能是"在有网络的情况下,把资源下载到本地",离线阅读就是"在没有网络或者网络不好的时候,阅读本地好缓存的文章资源".这样就很清楚我们要的这两个具体的功能需求