当前位置: 首页 > 编程日记 > 正文

indows上的android开发环境软件架构5

(二)实验要求:

? 修改按下button 显示的内容中添加上自己的学号姓名;

? 添加一个按钮,按钮名称为“退出”,并且为这个按钮添加事件代码,使得点击这个按钮后退

出程序。事件代码如下:

FullscreenActivity.this.finish();

? 添加完成后编译,把生成的apk 传到手机上安装运行查看结果

(二) android介绍

Android 是一种基于Linux 的自由及开放源代码的操作系统,主要使用于便携设备,如智能手机和平板

电脑。中国大陆地区较多人使用“安卓”或“安致”。Android 操作系统最初由Andy Rubin 开发,主要支持手机。

2005 年由Google 收购注资,并组建开放手机联盟开发改良随后,逐渐扩展到平板电脑及其他领域上。

Android系统结构

系统内核

Android 是运行于Linux kernel 之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,

Android 大都没有支持,包括Cairo(矢量绘图库)、X11(窗口系统)、Alsa(高级Linux 声音架构)、FFmpeg(图片)、

GTK(图形界面应用程序开发工具)、Pango(国际化文本处理库)及Glibc(GNU C 标准库)等都被移除掉了,就好比

Android 之前的基于J2ME 开发的Java 操作系统手机实际上是一个精简的Java 虚拟机。Android 又以bionic 取

代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 为了达到商业应用,必须移除被

GNU GPL 授权证所约束的部份。

硬件抽像层

Android 的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL 的目的是为了把Android

framework 与Linux kernel 隔开,让Android 不至过度依赖Linux kernel,以达成kernel independent 的概

念,也让Android framework 的开发能在不考量驱动程序实现的前提下进行发展。

中介软件

Android 采用OpenCORE 作为基础多媒体框架;使用skia 为核心图形引擎,搭配OpenGL/ES;多媒体数据

库采用SQLite 数据库系统;它的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual

Machine),Dalvik 虚拟机可以有多个实例(instance), 每个Android 应用程序都用一个自属的Dalvik 虚拟机

来运行,让系统在运行程序时可达到优化。Dalvik 虚拟机并非运行Java 字节码(Bytecode),而是运行一

种称为.dex 格式的文件。

Android 应用程序开发

Android 应用程序使用Java 做为开发语言。aapt 工具把编译后的Java 代码连同其它应用程序需要的数

据和资源文件一起打包到一个Android 包文件中,这个文件使用.apk 做为扩展名,它是分发应用程序并安

装到移动设备的媒介,用户只需下载并安装此文件到他们的设备。单一.apk 文件中的所有代码被认为是一

个应用程序。

从很多方面来看,每个Android 应用程序都存在于它自己的世界之中:

? 默认情况下,每个应用程序均运行于它自己的Linux 进程中。当应用程序中的任意代码开始执行

时,Android 启动一个进程,而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这

个进程。

? 每个进程都运行于自己的Java 虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代

码是隔绝的。

? 默认情况下,每个应用程序均被赋予一个唯一的Linux 用户ID,并加以权限设置,使得应用程序

的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的

应用程序所访问。

使两个应用程序共有同一个用户ID 是可行的,这种情况下他们可以看到彼此的文件。

Android 五大组件及相关类

活动—Activity

Activity 是为用户操作而展示的可视化用户界面。比如说,一个activity 可以展示一个菜单项列表供用

户选择,或者显示一些包含说明的照片。一个短消息应用程序可以包括一个用于显示做为发送对象的联系

人的列表的activity,一个给选定的联系人写短信的activity 以及翻阅以前的短信和改变设置的activity。尽

管它们一起组成了一个内聚的用户界面,但其中每个activity 都与其它的保持独立。每个都是以Activity 类

为基类的子类实现。

服务—Service

服务没有可视化的用户界面,而是在一段时间内在后台运行。比如说,一个服务可以在用户做其它事

情的时候在后台播放背景音乐、从网络上获取一些数据或者计算一些东西并提供给需要这个运算结果的

activity 使用。每个服务都继承自Service 基类。

广播接收器—Broadcast

广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的

──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行

广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。

内容提供—ContentProvider

内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite 数

据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现

了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver 对象,调用它

的方法作为替代。ContentResolver 可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行

管理。

意图—Intent

当接收到ContentResolver 发出的请求后,内容提供者被激活。而其它三种组件──activity、服务和广

播接收器被一种叫做intent 的异步消息所激活。intent 是一个保存着消息内容的Intent 对象。对于activity

和服务来说,它指明了请求的操作名称以及作为操作对象的数据的URI 和其它一些信息。比如说,它可以

承载对一个activity 的请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收器而言,

Intent 对象指明了声明的行为。比如,它可以对所有感兴趣的对象声明照相按钮被按下。

Android 程序结构

/src 目录下存放的是Android 程序核心代码。

/gen 目录下存放的是资源配置类BuildConfig.java 和R.java,提供给/src 中代码与/res 中资源连接的一个

桥梁。比较老的ADT 可能没有改目录,对应的类都一起放在/src 中,在此Eclipse 的ADT 中,可以所见所得

的设计界面,并自动更新R.java 文件。

/bin 目录下存放编译完成后的一些文件,包括*.apk。

/libs 目录下存放该项目要用的的Android 开发库。

/res 和/assets 目录下存放资源和资产以及一些说明文件,只是编译时有所不同。

AndroidManifest.xml 是组件配置文件以及一些项目属性文件。

当Android 启动一个应用程序组件之前,它必须知道那个组件是存在的。所以,应用程序会在一个

manifest 文件中声明它的组件,这个文件会被打包到Android 包中。这个.apk 文件还将涵括应用程序的代码、

文件以及其它资源。这个manifest 文件以XML 作为结构格式, 而且对于所有应用程序, 都叫做

AndroidManifest.xml,例如:

一个android 程序不像我们之前认识的c 和java 等程序是从main 函数作为入口开始执行的。它是从在

AndroidManifest.xml 中标注了‘android.intent.action.MAIN’和’android.intent.category.LAUNCHER’的activity

组件开始执行的,标明了这个activity 将在应用程序加载器中显示,就是用户在设备上看到的可供加载的应

用程序列表。换句话说,这个activity 是应用程序的入口,是用户选择运行这个应用程序后所见到的第一个

activity。而activity,service 组件如何执行又得看它们的生命周期:

Activity 组件类的主要函数:

void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()

上面几个函数控制Activity 的这三种状态之间的切换:

? 当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。它就是相应用户操作

的activity。

? 当它失去焦点但仍然对用户可见时,它处于暂停状态。即是:在它之上有另外一个activity。这

个activity 也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity 仍对用户可见。暂停的

activity 仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处

于极低内存的情况下,仍然可以杀死这个activity。

? 如果它完全被另一个activity 覆盖是,它处于停止状态。它仍然保留所有的状态和成员信息。然

而它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这

个activity。

R.java 文件:

其中的id 属性对应了res/layout 中各个控件,从中我们知道界面有两个按钮button1 和button2 以及一个文

本编辑框editText1 等控件。String 表示一些字符串资源。所以R.java 其实就是一个资源配置索引文件。如

果我们需要在核心代码中添加对某些控件的处理比如button1,可以如下操作:

布局Layout:

在一个Android 应用中,用户界面是由View 和ViewGroup 对象构建的。View 与ViewGroup 都有很多种类,

而它们都是View 类的子类。定义并展现你的视图层次的最常用的方法是使用XML 布局文件,XML 元素的名

称与它体现的Java 类相对应。所以一个<TextView>元素将在你的UI 中生成一个TextView,而<LinearLayout>

则创建一个LinearLayout 视图组。当你载入一个布局资源时,Android 系统会根据你布局中的元素初始化这

些运行时对象,举例来说,一个包含文本视图和一个按钮的简单垂直布局如下:

以上介绍了Android 的一些基本情况,当然还有很多内容没有覆盖到,如果对此感兴趣,可以网上查找

Android 的相关文档和源代码进行学习。

(四)实验内容:

1、下载adt-bundle-windows-x86 包(该文件可以到android 官网下载),解压到当前文件夹,打开其中的eclipse

文件夹下的eclipse.exe(该eclipse 已经默认装好了android sdk)。

2、点击Android Virtual Device Manager——Device Definitions——选择适合的设备——Create AVD 来建立一

个android 虚拟设备(也可以使用真机作为调试设备)。

3、回到主界面,点击File——New——Android Application Project 来创建一个Android 项目,取名Lab6,一

路Next 到最后选择FullScreenActivity,再点击Finish 完成。

4、在Package Explorer 中看到Lab6

5、打开res/layout 目录下的activity_main.xml 进行编辑。

6、在Palette 的Layouts 中选择LinearLayout(Vertical)左键点击不放拖到右侧的图形界面上并覆盖DUMMY

CONTENT 和Dummy Button 区域,如下图所示:

7、接着在Outline 中右键点击LinearLayout——Assign ID——输入名字如lab6layout——OK.

8、用同样的方法添加一个TextView 和Button 控件,它们可从Form Widgets 中选择。

9、添加完成后在Outline 中的textView1 和button1 的图标下有两个感叹号,只要点击button1,再点击下

面的Text 如下红线中的按钮——点击New String——在String 中输入”hello”——在New R.string 中输入”bt”

——点击OK(同样的办法对textView1,String 中为空,R.string 中为tv),这样对应的感叹号就消失了:

10、点击Save All 保存修改,查看/gen/com.example.lab6 包下面的R.java 如下:

11、打开/src/com.example.lab6 包下的FullscreenActivity.java 文件进行如下编辑:

1)在FullscreenActivity 类中添加三个变量如下:

运行程序总是出现unfortunately stop 后来思考,发现,原来是在界面还没有初始化前就想获得界面的一些对象,因此虽然编译没有报错,但是在运行时都是提前stop,修改获取界面对象的顺序后,就可以了。另一个是用其它方法实现进程结束(system.exit(0),等等三种方法),另一个是用真机实现联机调试,使用豌豆荚连接手机后,在调试的configure配置里,通过选择可以直接使用手机作为调试机子,而不用模拟器。

转载于:https://www.cnblogs.com/xjx-user/archive/2012/12/31/2840512.html

相关文章:

日志服务Flink Connector《支持Exactly Once》

摘要&#xff1a;Flink log connector是阿里云日志服务推出的&#xff0c;用于对接Flink的工具&#xff0c;包含两块&#xff0c;分别是消费者和生产者&#xff0c;消费者用于从日志服务中读数据&#xff0c;支持exactly once语义&#xff0c;生产者用于将数据写到日志服务中&a…

【组队学习】【27期】Java编程语言

Java编程语言 论坛版块&#xff1a; http://datawhale.club/c/team-learning/33-category/33 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Java 学习目标 Java独特的面向对象的抽象类编程特点&#xff0c;广泛应用于应用…

UI培训分享:如何提升自己的UI设计能力

相信很多UI设计师在工作中经常会遇到瓶颈&#xff0c;那么如何提升自己的UI设计能力?是我们要思考的一个问题&#xff0c;下面小编就为大家分享—些建议。 UI培训分享&#xff1a;如何提升自己的UI设计能力 1、多看 国内知名的设计网站&#xff0c;比如站酷网、花瓣网、多看优…

微信小程序使用阿里巴巴iconfont字体图标

打开阿里巴巴iconfont官网(http://www.iconfont.cn/);把用到的字体图标加到项目里面; 进入到项目里面&#xff0c;选择font class方式来使用&#xff0c;如果没有生成过代码的同学点生成&#xff0c;已经有代码的直接复制代码;iconfont.pngiconfont.png4.浏览器新建页面&…

IIS6 MVC3 配置

用mvc3做了一个网站&#xff0c;重写了下URL&#xff0c;http://www.xxxx.com/news/details/54.html. 结果在iis上预览找不到页面&#xff0c;但是在vs下就没问题直接运行就没问题。 具体的原因应该是找不到映射。 所以需要在iis上添加映射。 添加MVC的解析&#xff1a; 右击II…

【组队学习】【27期】动手学数据分析

动手学数据分析 论坛版块&#xff1a; http://datawhale.club/c/team-learning/25-category/25 开源内容&#xff1a; https://github.com/datawhalechina/hands-on-data-analysis 学习目标 以项目为主线&#xff0c;通过边学&#xff0c;边做以及边被引导的方式&#xf…

参加UI培训后可以找什么工作

UI设计在近几年备受大家的关注&#xff0c;很多企业对UI设计这个岗位也显得尤为重要&#xff0c;很多人都想转型学习UI设计技术&#xff0c;大多数人选择参加UI培训机构进行系统学习&#xff0c;那么通过系统培训的同学参加UI培训后可以找什么工作呢?来看看下面的详细介绍。 参…

Datawhale组队学习周报(第021周)

本文总结了本周&#xff08;07月05日~07月11日&#xff09;Datawhale组队学习的运行情况&#xff0c;我们一直秉承“与学习者一起成长的理念”&#xff0c;希望这个活动能够让更多的学习者受益。 第 25 期组队学习一共有 3 门开源课程&#xff0c;共组建了 3 个学习群&#xf…

alias重启终端失效的问题

如果使用命令 alias xxxxxx 那么登出以后&#xff0c;别名就会失效。下次登入的时候就不能用了。 为了保持别名可以把它写入.bashrc 在.bashrc的最后写入想要的别名&#xff0c;比如 alias zpll -al 然后退出&#xff0c;重新登入的时候就可以用了。 或者直接运行命令 source ~…

使用文本用户界面(NMTUI)进行网络配置

NetworkManager 文本用户界面&#xff08;TUI&#xff09;工具 nmtui 可提供一个文本界面配置由 NetworkManager 控制的网络。该工具包含在 NetworkManager-tui 子软件包中。写入时&#xff0c;不会默认随 NetworkManager 安装该子软件包。要安装 NetworkManager-tui&#xff0…

UI培训教程分享:常用的商业插画风格有哪些?

在UI设计岗位中插画设计是作为一名合格的UI设计师都会接触到的工作内容&#xff0c;运用插画设计&#xff0c;做到图文结合&#xff0c;令用户的印象也更加深刻&#xff0c;今天小编为大家分享的UI培训教程就是关于常用的商业插画风格有哪些?希望能够给大家带来帮助。 UI培训教…

快速构建Windows 8风格应用32-构建辅助磁贴

引言 Windows Phone中&#xff0c;我们开发者可能会开发的一个功能点是将数据列表中某一项“Pin To Start(固定到开始屏幕)”&#xff0c;大家都知道这种固定到开始屏幕的磁贴叫做辅助磁贴&#xff08;也叫二级磁贴&#xff09;&#xff0c;用户可以通过该辅助磁贴启动应用程序…

【第22周复盘】可以查成绩了!

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

UI培训教程分享:APP启动页UI界面设计

本期为大家分享的ui培训教程是关于APP启动页面的UI设计方面&#xff0c;作为一名合格的UI设计师&#xff0c;APP产品的启动页是需要会的&#xff0c;下面就来看看详细的教程吧。 UI培训教程分享&#xff1a;APP启动页UI界面设计 启动页面在APP中还是很有必要的&#xff0c;对于…

Nginx 配置

content_by_lua ‘’&#xff1b; set_by_lua $c "return ngx.var.a ngx.var.b"; rewrite_by_lua "ngx.var.a ngx.var.a 1"; access_by_lua if ngx.var.remote_addr "127.0.0.1" thenreturnendngx.exit(403);虚拟主机 server_name .a.org; …

cd: mkdir: rmdir: rm

1、1 绝对路径和相对路径绝对路径&#xff1a;是指在目录下的绝对位置&#xff0c;直接到的目标位置例如&#xff1a;只要看到这个路径&#xff1a;D&#xff1a;\图片\徐慧茹.jpg"文件是在D盘的“图片”目录中。类似这样完整的描述文件的路径就是绝对路径。相对路径&…

【Whalepaper】CV论文研读 - Involution内卷:超越Convolution的新算子

Whalepaper是由周郴莲负责的一个每周分享论文的活动&#xff0c;带你研读AI领域的论文&#xff0c;快来一起开源学术科研吧&#xff01; NLP 论文分享&#xff1a;每周日 晚上 九点CV 论文分享&#xff1a; 每周日 晚上 九点Res 论文分享&#xff1a;每周六 晚上 九点半 欢迎…

UI培训分享:UI设计师要掌握哪些知识点

UI设计师除了要学会自己所在行业的技术之外&#xff0c;还要了解一些其他的知识点&#xff0c;这些知识点都会在今后的工作中带来帮助&#xff0c;甚至是加分项&#xff0c;那么下面来看看小编为大家介绍的UI培训分享&#xff1a;UI设计师要掌握哪些知识点? UI培训分享&#x…

JavaScript 关闭窗口事件

方式一&#xff1a;(适用与IE浏览器&#xff0c;而且刷新不提示&#xff0c;只在点击浏览器关闭按钮的时候提示) <script type"text/javascript"> window.οnbefοreunlοadonclose; function onclose() { if(event.clientX>document.body.clientWidth&…

【直播】闫强:文本分类上分利器 -- Bert微调技巧大全

文本分类上分利器 – Bert微调技巧大全 直播信息 主讲人&#xff1a;ChallengeHub成员&#xff0c;中国人民大学硕士。 直播时间&#xff1a;2021年07月25日 15:00~16:00 直播内容&#xff1a; 经典论文介绍与解读模型继续预训练实现交流&答疑 直播网址&#xff1a; …

计算机基础第二课时

文件后缀名 1.也称文件扩展名(filename extension) 2.是操作系统用来标志文件类型的一种机制 3.通常来说&#xff0c;一个扩展名是跟在主文件名后面的&#xff0c;由一个分隔符分隔。例如&#xff1a;“前端开发知识要点.txt”的文件名中&#xff0c;前端开发知识要点是主文件名…

ui培训教程分享:平面设计怎样视觉空间感?

本期UI培训教程为大家分享的是关于平面设计怎样视觉空间感?在UI设计岗位中&#xff0c;视觉空间感对于设计师来说是非常重要的&#xff0c;所谓空间&#xff0c;是指立体形态周围的空虚部分&#xff0c;空间是无限的。任何空间形态的建立都必须借助立体形态来表达&#xff0c;…

Android组件框架:Android组件管理者ActivityManager

关于作者 郭孝星&#xff0c;程序员&#xff0c;吉他手&#xff0c;主要从事Android平台基础架构方面的工作&#xff0c;欢迎交流技术方面的问题&#xff0c;可以去我的Github提issue或者发邮件至guoxiaoxingse163.com与我交流。 第一次阅览本系列文章&#xff0c;请参见导读&a…

[转]HTTP协议详解

当今web程序的开发技术真是百家争鸣&#xff0c;ASP.NET, PHP, JSP&#xff0c;Perl, AJAX 等等。 无论Web技术在未来如何发展&#xff0c;理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解&#xff0c;内…

【Whalepaper】NLP论文研读 - Keyword-Attentive Deep Semantic Matching

Whalepaper是由周郴莲负责的一个每周分享论文的活动&#xff0c;带你研读AI领域的论文&#xff0c;快来一起开源学术科研吧&#xff01; NLP 论文分享&#xff1a;每周日 晚上 九点CV 论文分享&#xff1a; 每周日 晚上 九点Res 论文分享&#xff1a;每周六 晚上 九点半 欢迎…

web前端的就业前景好不好

web前端的就业前景好不好?一直有人都想知道这个答案&#xff0c;其实放眼互联网未来&#xff0c;web前端的发展前景都是非常好的&#xff0c;那么它的就业前景自热也是不错&#xff0c;具体来看看下面的详细介绍就知道了。 web前端的就业前景好不好?近几年的热门行业里&#…

android:HTTP通信 .

HTTP&#xff1a; 超文本传送协议&#xff08;hypertext transport protocol&#xff09;&#xff0c;用于传送WWW方式的数据。属于应用层的面向对象的协议。HTTP采用了请求/响应模型。客户端向服务器发送的请求包含了&#xff1a;请求的方法、URL、协议版本、请求修饰符、客户…

【青少年编程】【三级】打气球游戏

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

(转)如何修改maven的默认jdk版本

背景&#xff1a;在maven的配置文件中配置编译的jdk插件&#xff0c;就不需要在eclipse中进行重新的指定了。 问题 1、创建maven项目的时候&#xff0c;jdk版本是1.5版本&#xff0c;而自己安装的是1.7或者1.8版本。 2、每次右键项目名-maven->update project 时候&#xff…

Python适合初学者或者0基础学习吗?

Python适合初学者或者0基础小白学习吗?很多人都比较关注这个问题&#xff0c;因为近几年Python在互联网行业的发展显而易见&#xff0c;它的就业几率也非常高&#xff0c;具体来看看下面的详细介绍吧。 Python适合初学者或者0基础小白学习吗?与Java、C不同的是&#xff0c;Py…