android天气预报论文

2024-06-26

android天气预报论文(精选11篇)

1.android天气预报论文 篇一

Android系统一共提供了四种数据存储方式,分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。

SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。

SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。

File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。

ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作,

PS: URI由3个部分组成:“content://”、数据的路径、标识ID(可选)。

SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:

NULL: 空值

INTEGER: 整数

REAL: 浮点数

TEXT: 字符串

BLOB: 大数据

在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,详见:www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料,请参看:www.sqlite.org/

在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。其主要方法如下:

beginTransaction: 开始一个事务。

close(): 关闭连接,释放资源。

delete(String table, String whereClause, String[] whereArgs): 根据给定条件,删除符合条件的记录。

2.android天气预报论文 篇二

现如今在人们的生活当中,手机已经成为不可或缺的一部分了,特别是当手机从原始的只能接打电话发短信的基本功能更新扩展到现在的智能手机,其越来越被人们所依赖。随着手机的发展以及用户的需求增加,越来越多的手机功能被开发出来并投入应用。Android是以Linux为内核的操作系统和软件平台,它早期及之后的开发分别是由Google和开放手机联盟联合开发,它的基本架构分为4个层次,分别为:底层、系统运行库层、应用程序框架层和应用程序层。

Android是目前智能手机等设备常用的一种操作系统,Android的编程语言为Java,它的变化从接口一直到功能是层出不穷的。Android的基础多媒体框架是Opencore。Android具有蓝牙,Wi Fi以及通过蜂窝(cellular)连接等多种无线传输的选项。Android的软件栈还可以提供通过加速计及GPS来确定位置的信息。Android的多媒体数据库采用SQLite数据库系统。Android系统中的开发应用程序都是使用Dalvik虚拟机实现的,并且多以Java形式实现。使用Java虚拟机可以实现跨平台运行程序的功能,Dalvik是Java虚拟机中比较常见的一种虚拟机,它具备完善的硬件结构,并且具有具体的操作指令,它的核心内容库大多由C语言实现。每一个Android的应用程序总是对应着一个Dalvik实例,并且它是通过Dalvik虚拟机的解释实现的。

2 系统研究的方法及目标

2.1 研究方法

开发者想要做出美观、直接的用户界面,就要使用Android系统的4个组件,它们分别是:活动、服务、广播和内容提供者;在进行页面设计时最好结合使用LinearL ayout,Relative Layout,Table Layout,Frame Layout等组件进行格式上的布局;同时,为了满足个性化的需求,开发者还可以将Fragment与ViewP ager搭配使用,充分利用它们完善的功能。天气信息数据方面:可以利用HTTP通信协议请求天气预报数据接口,请求接口时要用异步线程的操作,并使用Android的DOM解析XML技术解析天气相关数据。对于数据库的设计可以使用DBManager和DBHelper结合构建SQLite数据库并完成数据表中数据的增加、删除、修改、查询等操作。

2.2 系统目标

在众多的APP软件中,一款方便快捷、时尚好用的天气预报软件是大多数用户所需要的。本APP的设计目标就是开发一款为大众所喜爱的天气软件。这其中包括可以通过选择要查询的城市来查看所选城市近一个星期的天气情况,天气情况包括风力、温度、温度变化曲线等信息。在为用户提供天气信息的同时也会根据天气的变化来显示温馨提示内容。用户不仅能了解到天气情况,也可以以短信的形式将天气情况发送给他人。本款APP完全满足了用户的需求,极大地方便了用户的出行。

3 系统功能分析

天气类的APP,是一个非常独特的分类,因为苹果把50万应用分为21个类,而天气APP是独立于工具类APP的,并且能和游戏这样的大类平起平坐,可见其重要性。一个天气类的APP首先应该能够为用户提供准确的实时天气信息,而且天气信息应该尽量详细而直观。最好能将天气变化的曲线直观地展示在用户的面前,并且获取天气信息的操作应该相对于用户隐藏,并尽量减少展示界面的不友好,避免发生卡顿现象,提高流畅性。并可以在显示天气的基本功能的基础上添加一些扩展功能,因为有些时候用户会提前查询天气信息,并根据天气信息来调整自己的行程安排。在这里,系统应该将获取的天气信息进行整理并提供给用户,让用户可以做一些简单的操作如设置提醒,分享天气信息等。此外为了满足用户对多个城市天气信息的了解和需求,设置多个关注城市是必须的。结合用户需求,天气预报系统应该具有以下功能。

(1)实时天气查询:可以显示用户所选择城市的实时天气信息和近期天气情况,包括温度、湿度、风力等。

(2)城市管理:为用户实现了添加、删除、更改等显示天气信息城市的功能。

(3)温度曲线:将城市近期的温度整理绘制成可视、直观的温度曲线供用户查看。

(4)出行计划:方便用户建立备忘录,在相应时间点设置出行提醒。

(5)短信分享:主要用于将天气预报中读取的当日天气情况等重要信息,以短信的方式发送给他人。

4 系统总体设计

4.1 系统总体功能设计

本天气预报系统具有五大功能:实况天气、城市管理、温度曲线、出行计划和分享天气。

实况天气包括高温、低温、风力风向、天气状况近期天气情况等;城市管理可以对所在城市进行修改、添加关注城市、删除城市等;温度曲线功能整理了所添加的当前城市近期温度变换情况并形成温度曲线;设置出行计划功能给用户提供简捷记录出行,设置定时提醒等便利;分享天气功能可以让用户将天气信息分享给通信录中的其他人。系统结构如图1所示。

4.2 数据库设计

天气预报系统从网络获取的天气数据并非是一次性的,并且网络天气数据有更新时间间隔。所以需要设计一个数据库对获取的天气数据进行保存。本天气预报系统使用SQLite数据库对天气数据进行管理包括:增加、更新、删除等操作。通过数据库对数据进行管理,提高了数据的复用性,减少了不必要的联网操作,同时提高了系统界面的流畅性。

依据软件工程数据设计规范和系统E-R图(见图2),天气预报系统的数据逻辑模型包含两个数据库文件(city.db和mysql.db)共4个基本表。

城市表(City):id(主键)、城市名(cityname)、首字母(namesort)、城市码(cityid)。

关注城市表(mycit y_1):p_id(主键)、城市名(cityname)、城市码(cityid)、状态码(citytap)。

计划表(myplan_1):p_id(主键)、日期(date)、时间(time)、标题(title)、内容(content)。

天气数据表(myweather_1):w_id(主键)、日期、周几、警示语、城市名、更新时间,实时温度、实时天气情况、近期温度(未来5天)、近期天气状况(未来5天)、昨日温度、昨日天气状况。

5 结语

综上所述天气预报系统所有预期功能都完整地实现,并且达到了预期的运行效果。当然不是所有工作都能按照初期设计实现,为了优化系统性能,达到更好的运行状态,在系统实现过程中对一些实现方法作了修改和补充。比如:在解析xml数据方法选择时并没有使用SAX解析方式,虽然该方法更适合手机应用,但因为本系统所使用的接口数据并不复杂,所以选用简单的DOM解析方式更为方便。

摘要:移动互联时代,随着移动设备的快速发展,手机用户数量不断增加,用户对APP软件的需求也在不断增加。Android是目前智能手机等设备常用的一种操作系统,该系统灵活友好的操作界面深受用户喜爱。本APP项目的主要目的是打造一款基于Android的方便快捷、功能完善的手机天气预报系统。

3.android天气预报论文 篇三

谷歌是一个家喻户晓的品牌,但尽管谷歌旗下的Android操作系统在全球智能手机领域占据了大量的市场份额,但Android本身还不够知名,谷歌允许硬件生产商基于Android设计自己的用户界面,因此对于普通用户而言,他们很难发现谷歌Nexus 5、HTC One M8、三星Galaxy S5使用的其实是同样的操作系统。

谷歌希望改变这一状况,其中一个措施就是要求新手机在启动时显示“Powered by Android”(意即“安卓动力”)标语,

HTC One M8或三星Galaxy S5开机过程中,用户会看到这个标语清晰地显示在公司品牌下面。而且这两款手机显示的不仅仅是文本,HTC和三星都采用了经典的Android LOGO,这是原始的Android手机HTC G1开机动画里采用的画面。

4.android天气预报论文 篇四

软体需求:

Adobe Flash CS5.5 或是Adobe Flash Builder4.5

在这以Flash CS5.5 来做教学

开启新档,选择AIR for Android

制作方法就和一般的flash 写法都一样

但要注意一些小细节

1:尽量使用点阵图而不要用相量

Flash CS5.5 在物件的面版上,提供了新的方法,让你可以在编译后,帮你把MovieClip 直接输出成点阵图

使用这个功能,该MovieClip 就变成了一张图档, 里面的功能会失效

另一个方法是全选你的相量物件,按一下右键后,会出现Convert to Bitmap

2:不要使用filter, blend mode, alpha

这些都是很占用效能的步骤

Publish

General:

Output file:要输出的apk 档名

App name:你的app 名称,会出现在Android 上icon 的名称

App ID:这个跟上传到android Market 上会有很重要的关系

当你第一次上传apk 后, 之后每次更新的apk 档, 该App ID 都要一样,否则不能上传

Version:一样和上到到android Market 有关,新的apk 版本号要比前一版高才能上传。

Version label:这个只是显示用。

Aspect ratio:可以指定是Portrait (直), Landscape(横) 或是Auto(自动)

Full screen:打勾的话,你的app 会满版,没有的话,上面会保留Android 的Tital Bar

Auto orentation:是否自动旋转。

Render mode:一般flash 都是透过CPU 在运算, 在Mobile 上,可以选择GPU 加速。

Included files:编译成apk 时,同时把另外的档案也加入,如图片或是sqlite等。

Deployment:

Certificate:验证档, 你可以按最右边的Create 产生一个属于自己的验证档

Password:你的验证档密码

Android deployment type:

在这虽然有Emulator 的选项,但更新到AIR2.6 后,装上去执行都会出现Error,如果有人测成功的话再麻烦告知方法,

还是乖乖选择Device release 吧

Get AIR runtime from:如果使用者安装你的apk , 发现没有AIR runtime 时,会到那儿下载

预设就选Google Android Market吧

Icons:

Android 有三种Size , 36×36 , 48×48, 72×72

Permissions:

这里跟Android 的Permissions 是一样的,只是目前AIR for Android 还没有那么多可以选

如果你有需要用到特别的功能,都需要在这儿打勾才可以使用

比如说你要使用Camera , 就要选 CAMERA

要录音,就要选RECORD_AUDIO

安装Android SDK

developer.android.com/sdk/

接上你的Andr漠挡 手机, 按下l怖, 就可以成功上传到你的手机上了。

关于catchAsBitmap 和catchAsBitmapMatrix

在AIR2.6 里

所有的DisplayObject 多了一个catchAsBitmapMatrix 可以使用

看一下官方文件的说明

简单来说,就是你的物件只有move, rotation, alpha , scale 等动作时

可以开启这样的属性,会让你的效能更佳

而另一个cacheAsBitmap 指的是如果物件只有移动的话,开启该属性效能会更佳

所以我就针对

什么都不开启

开cacheAsBitmap

开cacheAsBitmap和cacheAsBitmapMatrix

并配合二种动作方试来做测试

测试的结果:

什么都不开,二种动作都会lag

只开cacheAsBitmap, 在只有移动时,效能优,但如果加上rotation 之类的话,比什么都不开还要慢

开cacheAsBitmapMatrix, 效能最优

祝大家学习愉快

补充一下:

你的Android手机必需是2.2 以上版本

5.Android简历 篇五

个人信息

姓名:XXX

年龄:XX

学历:本科

联系电话:186XXXXXXX

个人技能

1.熟练掌握JAVA面向对象编程语言,有良好的编码习惯;

2.熟悉jsp、javascript、servlet、javaBean进行web应用开发,了解jQuery,ajax等技术;

3.能使用Struts2、Hibernate、Spring等开源框架技术;

4.熟练操作SQL sever、MySQL数据库,熟悉SQL语句;

5.熟练掌握Android adt编程环境和调试流程;

6.熟练掌握Android的4大组件和5种常用布局;

7.熟练Sqlite、File、SharePreference等存储方式;

8.熟练使用xml、json等解析技术;

9.熟悉编程软件环境配置,熟练运用Eclipse和MyEclipse等编程软件。

教育培训

2009年9月——2013年6月

2012年2月——2012年5月

项目经验

1.Android选课系统

描述:一款基于Android平台的选课软件,通过软件访问WEB短的服务器进行操作,web端采用servlet实现,能进行课程的查询、添加、删除。

2.基于SSH的论坛

描述:实现简单的注册登录功能,用户可创建自己的论坛并有管理权限,会员可发帖,帖子有回复功能,版主可管理自己的帖子。

自我评价

我有一颗积极向上的心,对于软件开发有较大兴趣。喜欢运动,热爱生活,热爱学习。诚实做人,踏实做事是我的做人原则。有较强的团队意识,比较善于团队合作。我坚信,努力不一定会成功,但肯定会有收获。我期待这个收获的过程。我将投入自己全部的激情,努力奋进。

6.android培训 篇六

android培训

随着智能手机用户的不断增加,智能手机市场竞争也日趋激烈,总体市场呈现以下特点:首先,移动互联网业务应用成为智能手机市场发展的重点。移动互联网时代,消费者更看重的是移动业务应用带来的用户体验,而智能手机市场的未来发展也是围绕客户体验展开的。另一方面,数据增值业务是运营商的重要业务,运营商普及智能手机主要是为带动增值业务的发展,因此,运营商会对智能手机市场产生巨大的推动作用。android平台的产品的不断增加,必然会产生巨大的android技术人员的需求,也因此引起我android培训市场才会人气高涨。

千锋3G学院是中国最权威的Android培训基地,近几年培养了大批Android开发人才,千锋Android的讲师团队由Mars老师带领,他有近十年IT培训从业经验,2010年起无偿发布Android教学视频,六个月浏览量就突破数百万次,被称为中国Android视频教程第一人。其教学态度严谨,并随时针对企业需求,最新技术对课程进行升级。课程链接:

千锋网站上公布的学员作品,武士战争、新浪微博、幼儿早教、股票查询、音乐随身听等,充分展现了学员的技术水平和千锋的教学效果。

千锋3G学院中国移动互联网研发培训专家

7.android培训学院 篇七

android培训学院

国外Android市场正在如日中天的扩展,据市场调研机构NPDGroup最近发布的一份报告称,今年第一季度基于Android操作系统的智能 手机在美国智能手机总销量中所占比例达到28%,首度超过苹果iphone,苹果iphone约为21%,相信在不久的将来会有更多的用户选择 Android系统的手机或是无线终端设备。一个产业的壮大和发展,必定需要大量专业领域的人才去支持。据业内统计,目前国内安卓人才的需求占大多数比例。

目前,各大企业都在积极扩充研发队伍,从培训机构引进Android开发人才。而在众多培训机构中,千锋3G学院毕业的学员最受欢迎的。近几年为百度、搜狐、东软集团、神州数码、航为科技、搜房网等大中型企业输送不少人才。千锋之所以取得这样的成绩,首先居于其优秀的教学团队。千锋Android的讲师团队由Mars老师带领,他有近十年IT培训从业经验,2010年起无偿发布Android教学视频,六个月浏览量就突破数百万次,被称为中国Android视频教程第一人。学员入学签订就业合,保证就业。

现在千锋正在面向全国招生,如果你也有互联网梦,想拿高薪,不妨先去参加千锋的免费试听课。

千锋3G学院中国移动互联网研发培训专家

8.android面试题 篇八

一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。

如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。

如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只能调用UnbindService, service就会被销毁

如果一个service通过startService 被start之后,多次调用startService 的话,service会多次调用onStart方法。多次调用stopService的话,service只会调用一次onDestroyed方法。

如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。

多次调用unbindService的话会抛出异常。

15. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放.

遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解()

A开启B的时候,用startActivityForResult()方法, B返回的时候把播放的状态信息返回给A ,A继续播放音乐.

16. 什么是IntentService?有何优点?

普通的service ,默认运行在ui main 主线程

Sdk给我们提供的方便的,带有异步处理的service类,

异步处理的方法 OnHandleIntent()

OnHandleIntent() 处理耗时的操作

17. 什么时候使用Service?

拥有service的进程具有较高的优先级

官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。

1. 如果service正在调用onCreate, onStartCommand或者onDestory方法,那么用于当前service的进程相当于前台进程以避免被killed。

2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.

3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。

4. 如果service可以使用startForeground(true)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。

如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。

1.Service的特点可以让他在后台一直运行,可以在service里面创建线程去完成耗时的操作. 天气预报 widget TimerTask Timer 定期执行timertask

2.Broadcast receiver捕获到一个事件之后,可以起一个service来完成一个耗时的操作.

Broadcast receiver生命周期 和 响应时间很短

3.远程的service如果被启动起来,可以被多次bind, 但不会重新create. 索爱手机X10i的人脸识别的service可以被图库使用,可以被摄像机,照相机等程序使用.

18. 请描述一下Intent 和 Intent Filter。

Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。

通过Intent 可以实现各种系统组件的调用与激活.

Intent filter: 可以理解为邮局或者是一个信笺的分拣系统…

这个分拣系统通过3个参数来识别

Action: 动作 view

Data: 数据uri uri

Category : 而外的附加信息

Action 匹配

Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:

……

如果我们在启动一个 Activity 时使用这样的 Intent 对象:

Intent intent =new Intent();

intent.setAction(“cn.itcast.action”);

那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。

Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。

URI 数据匹配

一个 Intent 可以通过 URI 携带外部数据给目标组件。在 节点中,通过 节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:

android:host=“host” android:port=“port” android:path=“path”/>

电话的uri tel: 12345

www.baidu.com

自己定义的uri itcast://cn.itcast/person/10

如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。

Category 类别匹配

节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。

9.android面试题 篇九

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews;

setListensers();

}

// 定义

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

private void setListeners() {

calcbutton.setOnClickListener(calcBMI);

}

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat(“0.0”);

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if (BMI > 25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI < 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

}

总结:

关于项目

在就是你项目经验,一定要突出你遇到什么难点,然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

心态:

什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~

10.Android笔试题 篇十

A: float f=(1.9 + 0.1)/(int)1.0

B: float f=1.0F

C: float f=(float)1.0F

D: float f=(int)(0.73+0.27);

【 】2:设x和y均为int型变量,则以下语句:x+=y,y=x-y;x-=y;的功能是

A:把x和y按从大到小排列

B:把x和y按从小到大排列

C:无确定结果

D:交换x和y中的值

【 】3:请写出下面程序运行的结果

int x = 0;

int y = 1;

int a = x++ + ++x;

int b = y-- - --y;

System.out.println(++a + b++);

A:3 B:4 C:5 D:6

【 】4:选择下列程序运行的结果

int total = 0;

for (int i = 0, j = 5; total < 10 || j >3; ++i, --j) { total += (i + j);

System.out.println(total );

}

A:结果为 5 ,因为一个i自加,一个j自减抵消等于没有自加 B:结果为 10,因为正常运算了

C:有语法错误,不能写多个变量

11.Android方案总结 篇十一

如上图,应用程序的开发过程中我们使用了飞思卡尔的i.MX51 EVK Hardware。设备提供的支持如下:多标准音频回放;多标准视频回放;开放的系统支持;

二、软体结构

1、Android系统的初始化流程图如下所示:

BeginMkdir: /dev,/proc,/sys,/dev/pts,/dev/socketaction_for_each_trigger(“early-init”, action_add_queue_tail);property_set(ro.XXX)open_devnull_stdio():fd is 0,1,2device_initaction_for_each_trigger(“init”, action_add_queue_tail)log_init: /dev/__kmsg__property_initaction_for_each_trigger(“early-boot”, action_add_queue_tail);parse_config_file(“/init.rc”)Check have /dev/consoleaction_for_each_trigger(“boot”, action_add_queue_tail);import_kernel_cmdline: /proc/cmdlineload_565rle_image(INIT_IMAGE_FILE)queue_all_property_triggers()get_hardware_name: /proc/cpuinfoIf load okrestart_processes()Yparse_config_file(/init.%s.rc)Show Image, and Print “A N D R O I D”to ttyEnd

可以具体描述如下:(1).初始化log系统。

(2).解析/init.rc和/init.%hardware%.rc文件。

(3).执行 early-init action in the two files parsed in step 2。

(4).设备初始化,例如:在 /dev 下面创建所有设备节点,下载 firmwares。

(5).初始化属性服务器,Actually the property system is working as a share memory.Logically it looks like a registry under Windows system。

(6).执行 init action in the two files parsed in step 2。

(7).开启 属性服务。

(8).执行 early-boot and boot actions in the two files parsed in step 2。

(9).执行 Execute property action in the two files parsed in step 2。

(10).进入一个无限循环 to wait for device/property set/child process exit events。

2、方案基本框架,如下图所示:

Native codeDaivik runtimeAndroidNDKappsJNIAndroidSDKappsAndroid app frameworkStandard librariesLinux kernel+Android extension

(1)图中Native Code包含一系列运行与Linux内核之上,由C/C++语言写成的库,这些库提供基本的系统级功能。其为应用层提供了本地开发的可扩展性,在此次开发过程中,Native Code主要为我们提供了音视频的编解码(即我们在此层开发了我们自己的音视频的编解码)。系统中主要使用的是G711音频编解码,实现语音的本地录音及播放;FFMPEG视频解码,进行图像视频的解码,实现视频的实时播放。

(2)Dalvik runtime的相关介绍。Android系统的应用开发语言是Java,而保障这一点的就是Android runtime。Java语言的运行需要有虚拟机的存在,而Android runtime 的核心就是一个称之为Dalvik的虚拟机。另外,Android runtime还包含了一个强大的Java核心类库。这个类库从功能上涵盖了传统Java核心类库的大多数功能。应用程序调用Android 函数库(即Android runtime中的Java核心类库)中的函数时,其实只是调用的一个函数名,具体实现在Native Code中的Library中。即是Library为上层的应用提供API供开发使用。(3)关于JNI。Java Native Interface(JNI)标准,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。我们开发的音视频本地编解码库,就是通过JNI来使用的。如下,private static native void InitEnv();private static native int drawFrame(Bitmap bitmap, byte[] inbuffer, int buf_len);这是我们在程序中调用的本地函数,先要使用关键字native进行本地声明。static { System.loadLibrary(“decode”);}

这是用来加载我们的c动态库的,上面的native声明中的方法就是在我们加载的库中具体实现的。

上一篇:建筑结构试验复习下一篇:圣诞平安夜经典朋友圈说说祝福语