黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一)

时间:2019-05-13 18:54:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一)》。

第一篇:黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一)

【济南中心】Android就业面试技巧系列-技术篇(敏捷开发

一)

敏捷开发由来

2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪 鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一 份简明扼要的《敏捷宣言》传递给世界,同时即宣告了敏捷开发运动的开始。《敏捷宣言》

我们通过身体力行和帮助他人来揭示更好的软件开发方式。经由这项工作,我们形成了如下价值观:

个体与交互

重于 过程和工具 可用的软件

重于 完备的文档 客户协作

重于 合同谈判 响应变化

重于 遵循计划

在每对比对中,后者并非全无价值,但我们更看重前者。敏捷开发模式

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。敏捷方法强调以人为本,专注于交付对客户有价值的软件。在高度协作的开环境中,使用迭代式的方式进行增量开发,经常使用反馈进行思考、反省和总结,不停的进行自我调整和完善.敏捷开发,相对传统软件开发模式,它主要是针对快速变化的需求,不断优化管理流程,最终推出优质软件.黑马程序员济南中心 编著

敏捷开发的宣言

一:个体及交互比流程与工具更具价值 二:可用的软件比冗长的文档更有价值 三:与客户的协作比合同谈判更有价值 四:对变化的响应比遵循计划更有价值 5个价值

1.承诺 – 愿意对目标做出承诺

2.专注– 把你的心思和能力都用到你承诺的工作上去 3.开放– Scrum 把项目中的一切开放给每个人看 4.尊重– 每个人都有他独特的背景和经验

5.勇气– 有勇气做出承诺,履行承诺,接受别人的尊重 Scrum的重要名词

Backlog一次迭代开发的时间周期,一般最多以30天为一个周期。在这段时间内,开发团队需要完成一个制定的Backlog。

Product Owner负责监督整个Scrum进程、修订计划的一个团队成员。研发项目管理经理

流程经理 敏捷教练 开发主管

Sprint planning meeting开发团队成员参加,一般为15分钟。每个开发成员需要向Scrum Master汇报三个项目:今天完成了什么? 是否遇到了障碍? 即将要做什么?通过该会议,团队成员可以相互了解项目进度。

Sprint review meeting对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为3小时。

PBI Product Backlog Item 产品待办清单条目,简称PBI 敏捷开发成员架构 Scrum Master

负责管理Scrum流程,确保Scrum正常运转。Scrum Master是教练,是牧羊犬,是Scrum项目秩序的维护者。

· 负责监督整个Scrum项目进程,调整项目计划 · 确保开发团队成员的能力能够胜任产品的开发;

· 促进团队中不同角色的成员间充分交流和沟通,并负责为项目的进行扫除障碍; · 保证开发团队不受外力的干扰和阻挠;

· 掌握产品开发进度,参与每日Scrum会议、Sprint计划会议和Sprint评审会议。· Scrum Master最经常的情况就是由过去的项目组长(Team leader)来担当 产品负责人 Product Owner

负责管理产品Backlog 并使游戏项目价值最大化,代表项目的全体利益相关者。

黑马程序员济南中心 编著

Product Owner的角色通常由市场部门的人员或开发部门内部主要使用该产品的人来担任,他的主要工作是根据市场需求,确定产品的功能,列入Product Backlog中,并为这些功能确定优先级别。

Scrum团队按照功能的优先级,将它们从高到低分配到各个Sprint中进行开发,这些被分配到一个Sprint中完成的功能就形成了Sprint Backlog。

在产品的整个开发过程中,Product Owner对于产品的需求可能会发生改变。他可以修改Product Backlog,增加某些功能需求、删除某些功能需求、修改优先级等等,但这些行为只能在各个Sprint之间进行 团队

团队是负责开发软件的跨职能小组。团队是自我管理的,在Scrum Master 的帮助下,团队提出承诺,完成自己的承诺,实现软件价值。

一般由5-10个能全职工作的成员组成较为理想;团队成员横跨各个职能,通常包含开发,测试,文档设计人员等等。敏捷开发团队原则 最大的分歧

最大的分歧在于开发人员和测试人员之间。作为敏捷团队的成员,测试人员被期望能编写一点代码,同时开发人员可以做一 些测试。各自的强项还是很重要:新的角色要求每个成员成为大家所谓的“通才”。测试人员大多数时间作测试,开发人员大都编写代码,但所有人都分享他们的工 作,而且有能力承担他们面前的任务。发现中立点

团队决定作为一个团队需要做什么,如何最好地分配工作。第一步是让团队成员说说他们自己的技能集、优点和缺点。但却不希望他们根据以前角色(如,软件测试员或开发员)来定

黑马程序员济南中心 编著

义自己。所以找到一个中立点,列出了小型离线会议,和每周工作之外的小时集体活动所需的事项。正确执行应用程序

团队找到了让自己感到舒服的新水平。整个项目的工作流程顺利进行,只做一个待办的事情,而不是四个。Scrum过程简单介绍 将整个产品的Backlog分解成若干Sprint Backlog,每个Sprint Backlog是按照目前的人力物力条件可以完成的。召开Sprint planning meeting,划分、确定这个Sprint内需要完成的任务,标注任务的优先级并分配给每个成员。进入Sprint开发周期,在这个周期内,每天需要召开Daily Scrum meeting。4 整个Sprint周期结束,召开Sprint review meeting,将成果演示给Product Owner。5 团队成员最后召开Sprint retrospective meeting,总结问题和经验。6 周而复始,按照同样的步骤进行下一次Sprint。敏捷开发流程

黑马程序员济南中心 编著

敏捷开发模型流程图

从敏捷开发流程模型图当中可以看出,在敏捷实施过程当中,有四种会议,分别是计划会,每日站会,回顾会,评审会,其中数计划会最为重要。在敏捷开发模式中,每种会议都有其特殊的职责和使命,不同的会议上所讨论的内容是不一致的,只要把握住会议的关键点,就可以为团队的敏捷模式服务。

Sprint Planning敏捷迭代计划会议 1 Sprint Planning敏捷迭代计划会议

在每个敏捷迭代开始之初,由产品负责人讲解需求,并由开发团队进行估算工时的计划会议。在会议上需要:排列需求优先级;分析和评估产品Backlog并确定该迭代的目标;计划会议上还需要制定迭代计划,包括: 根据产品Backlog(功能点)创建Sprint Backlog(即迭代任务);然后为Sprint backlog中的任务做估算;团队成员从产品Backlog中挑选他们承诺完成的条目。

敏捷的迭代实现始于计划会议,所以一个好的计划会议是每个迭代成功的基础,一般分两个阶段进行,两个阶段参与会议的人员会不一样; 计划会议的目标:

黑马程序员济南中心 编著

1、基于敏捷规划产生的Product Backlog以及优先级,通过计划会议,确定迭代的目标、团队成员、形成Sprint Backlog,明确评审会、回顾会时间;

2、分解Sprint Backlog并确定相应的完成时间,并由团队成员共同挑选这些Sprint Backlog;

阶段一参与人员:产品经理、Product Owner、Scrum Master、团队成员,有业务人员的话还可以邀请业务人员一起参加。会议时长:1-4小时 一般参考进程安排如下:

1、Scrum Master公开迭代时间表;

2、产品经理和Product Owner讲述Product Backlog,对应的业务价值和优先级;

3、团队针对Sprint Backlog和优先级达成一致;

4、Scrum Master和团队成员共同确定Sprint Backlog; 阶段二参与人员:Scrum Master、团队成员,其他人员选择性参加 会议时长:1-4小时 一般参考进程安排如下:

1、团队成员针对Sprint Backlog共同分解任务;

2、团队成员共同进行工作量评估(每个Task不超过2天),确定开始时间和完成时间;

3、团队成员共同认领任务;

4、共同确定DoD,团队达成一致;

5、团队共同确认迭代目标和价值;

如果单个迭代内安排的Product Backlog安排的比较多的话,一般迭代计划会议需要开一个整天,虽然时间有点长,但这个会议会确认整个迭代的详细计划和安排,因此也是值得的。

黑马程序员济南中心 编著

一个典型的Sprint计划会议时间表

Sprint 计划会议:13:00 – 17:00(建议每小时休息10分钟)

13:00 – 13:30 产品负责人对Sprint目标进行总体介绍,概括产品Backlog。定下演示的时间地点。

13:30 – 15:00 团队估算时间,在必要的情况下拆分Backlog条目——把“故事”进一步拆分成“任务”。产品负责人在必要时修改重要性评分。理清每个条目的含义。所有重要性高的Backlog条目都要填写“如何演示”。

15:00 – 16:00 团队选择要放入Sprint中的故事。计算生产率,用作核查工作安排的基础。16:00 – 17:00 为每日Scrum会议(简称每日例会)安排固定的时间地点——如果和上次不同的话。

Sprint应该多长才好?

时间短就好。公司会因此而变得“敏捷”,有利于随机应变。

短的Sprint = 短反馈周期 = 更频繁的交付 = 更频繁的客户反馈 = 在错误方向上花的时间更少 = 学习和改进的速度更快 绘制任务版

任务版中的任务是分解到手头的实际的工作

把要做的任务,正在做的任务和已经完成的任务,用简单的贴士贴在白板上.不同的颜色表示不同的重要程度.开发人员选择任务帖在规定时间内完成任务

黑马程序员济南中心 编著

敏捷开发遇到的扑克牌(计划纸牌)

每个人都会得到如上图所示的13张卡片。在估算故事(任务)的时候,每个人都选出一张卡片来表示他的时间估算(以故事点的方式表示),并把它正面朝下扣在桌上。所有人都完成以后,桌上的纸牌会被同时揭开。这样每个人都会被迫进行自我思考,而不是依赖于其他人估算的结果。

如果在两个估算之间有着巨大差异,团队就会就此进行讨论,并试图让大家对故事内容达成共识。他们也许会进行任务分解,之后再重新估算。这样的循环会往复进行,直到时间估算趋于一致为止,也就是每个人对这个故事的估算都差不多相同。2 Daily Stand-up Meeting每日站会

黑马程序员济南中心 编著

团队每天进行沟通的内部短会,因一般只有15分钟且站立进行而得名,团队成员通常会在会议上讲述如下3点内容: 1)

昨天我做了什么 2)

今天我计划要做什么

3)

我遇到了什么问题,妨碍了我尽可能有效地工作

Scrum Master记录会议上提出的问题,但是不要在会议上讨论和解决问题,而是要会后在找相关人员进行讨论和解决。3 Sprint Review 敏捷迭代评审会议

在迭代结束前给产品负责人演示并接受评价的会议,并根据反馈结果,提出新的产品Backlog 参与人员:产品经理、Product Owner、Scrum Master、团队所有成员 会议时长:1-4小时,视演示内容而定

主要是检验迭代成果,检查是否完成迭代计划中的迭代目标,有可能的话要求用户参与测试流程,并得到用户对产品的认可,鼓励用户自己进行测试设计和进行破坏性测试,充分暴露产品的设计和功能问题。

由Scrum Master来推进会议进程,Product Owner记录用户反馈,根据结果维护产品 backlog,一般在迭代结束前做一次。4 Sprint Retrospective 敏捷迭代回顾会议

在每个迭代结束后召开的关于自我持续改进的会议,围绕如下三个问题进行讨论: 1)

本次迭代有哪些做得好;

2)

本次迭代我们在哪些方面还能做得更好; 3)

我们在下次迭代准备在哪些方面改进;

黑马程序员济南中心 编著

团队确定问题优先级,并根据优先级确定团队能够解决的Top问题;团队讨论Top问题的措施,并选择在下一个迭代可以完成措施,分配责任人进行跟踪。参与人员:Scrum Master,Product Owner,团队成员。会议时长:0.5-1.5小时

主要针对当前迭代,团队成员自由讲述可以需要保持的做法,改进的点以及持续跟踪计划。Scrum Master将团队讨论以及行动计划形成会议纪要,并发送给整个团队和有关同事。需要按照回顾会议的结论,维护一份待办事项列表,在下次回顾会议上进行跟踪。案例分析

案例一:某Team在每日站会中,Scrum master准时组织大家开始晨会,成员一个接着一个说,昨天做了什么事情,今天计划做什么事情,遇到什么问题,成员A说昨天遇到了一个问题未能解 决,Scrum master问遇到的是什么问题,成员A详细说明了该问题,这时成员B说这个问题他也遇到过,他是通过XX方式解决的,讨论后成员A明白了,然后继续晨 会,由于小组成员有10个人,整个会议开下来大概花费了30分钟。

问题分析:Scrum master不应该在每日站会上询问详细的问题细节,而应该转移到会下询问,当团队成员之间进行讨论的时候,Scrum master需要及时拉回来,讨论应该转移到会下进行,晨会要在固定的时间固定的地方并且在固定的时间内完成。会议时间需要控制在15分钟之内。

案例二:某Team在开回顾会议中,Scrum master详细总结了本次迭代中有哪些做不够好的,并指出了对应的事和人,接着对应的责任人开始述说哪些地方确实是做的不够好及其原因,最后给出改进措施然后结束会议。

问题分析:回顾会不是批斗会,不应该只说做的不好的,做的好的也要说,Scrum master主要是鼓舞大家的士气,应该先从做的好的方面开始说起;并且做的不好的方面都只对事,黑马程序员济南中心 编著

不对人,做的不好是整个Team的责任,不仅仅是某几个 人的责任;最后的改进措施需要给有后续跟踪的责任人和有效性的反馈。

在敏捷的迭代执行过程中,上述四种会议会随着每个迭代一直进行,基本上形成了一个闭环,可以让团队在每个迭代的执行过程当中去学习和总结,从而正确的按照敏捷的要求去做,使团队真正的敏捷起来。

黑马程序员济南中心 编著

第二篇:黑马程序员android开发笔记(一)

01、什么是3G 02、android系统简介 03、android背景介绍 04、android的framewor简介 05、两种虚拟机的比较 06、sdk的下载以及简介 07、创建android模拟器 08、ddms简介

09、platform-tools的简介及常见adb指令

10、android项目的目录结构

11、android下apk安装的过程

12、常见的adb指令介绍

13、创建模拟器遇到的常见错误

14、电话拨号器

15、点击事件的四种写法

16、短信发送器

17、相对布局&单位介绍

18、现形布局&布局的组合

19、表格布局&绝对布局 20、帧布局

21、测试相关概念

22、android下junit测试框架配置

23、logcat简介

24、保存文件到手机内存

25、android下文件访问的权限

26、保存文件到SD卡中

27、分析setting源代码获取SD卡大小

28、_sharePreference入门

29、xml文件的序列化 30、采用pull解析xml文件

31、采用断电调试的方法观察pull解析的的流程

32、android下创建一个sqllite数据库

33、sql语句实现数据库的增删改查

34、系统api实现数据库的增删改查&Sqlite3工具的使用

35、数据库的事物

36、listView入门

37、采用layoutInflater打气筒创建一个view对象

38、采用数据适配器ArryAdapter

39、常用数据适配器simpleAdapter 40、数据适配器总结

41、内容提供者简介

42、内容提供者的实现

43、短信的备份

44、插入一条记录到系统短信应用

45、内容观察者

46、获取系统的联系人信息

47、保存联系人到系统通讯录

48、读取联系人的一个小细节

49、网络图片查看器

50、anr产生的原理&如何避免

51、android消息机制入门

52、网络html查看器

53、字符乱码问题的处理

54、采用get方式提交数据到服务器

55、采用post方式提交数据到服务器

56、提交数据到服务器中文乱码问题的处理

57、采用httpclient提交数据到服务器

58、异步http框架简介&实现原理

59、异步http框架提交数据到服务器 60、上传文件到服务器

61、smartimageview&常见开源代码 62、多线程下载的原理 63、多线程断点下载的原理

64、多线程java代码移植到android 65、多线程下载文本页面的更新 66、显示意图激活另一个activity 67、隐式意图激活另一个activity 68、隐式意图的配置

69、隐式意图和显示意图的使用场景 70、在不同activity之间数据传递 71、activity的声明周期 72、activity的启动模式

73、activity横竖屏切换的声明周期 74、开启新的activity获取他的返回值 75、请求码和结果码的作用 76、利用广播实现ip拨号 77、短信窃听器

78、自定义广播时间&发送自定义广播&广播接受者优先级 79、采用服务执行长期后台操作 80、采用服务窃听电话&服务的声明周期 81、android进程优先级&为什么使用服务 82、绑定方式开启服务&调用服务的方法 83、服务的声明周期(混合开启 84、采用aidl绑定远程服务

85、代码注册广播接受者&利用广播调用服务的办法 86、加载大图片到内存 87、获取图片exif信息 88、从gallery获取图片 89、图片画画板 90、扒开美女衣服 91、图片的缩放 92、图片的旋转

93、图片的平移&镜面&倒影效果 94、图片的合成 95、图片的颜色处理 96、多媒体播放api简介 97、人脸识别

98、mediaplayer的生命周期 99、soundpoo简介

100、sufaceview的生命周期 101、播放在线视频

102、视频播放器进度的处理 103、调用系统照相机拍照和录像 104、采用camera拍照 105、常见对话框 106、notification入门 107、菜单

108、android下的样式 109、android下的主题

110、代码编写ui 111、html创建ui 112、帧动画

113、代码创建创建的tween动画 114、xml文件定义动画 115、传感器简介 116、117、杀死进程 118、apk的安装 119、应用程序的反编译 120、动态创建fragment 121、用fragment创建一个选项卡 122、fragment的向下兼容性 123、fragment的生命周期 124、fragment之间的通讯 125、应用程序国际化

04、android的framewor简介

Wap:wait and play Wireless Makeup Language(WML)精简的html语言 Applications:android自带的基本上层应用 Aplication framework:应用程序框架 Librarics: Linux lernel:

05、两种虚拟机的比较

编译后文件格式:

jvm:.java->.class->.jar dalvik vm:.java->.dex->.odex 基于的架构:

jvm:基于栈的架构

dalvik vm:基于寄存器的架构

Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高

06、sdk的下载以及简介

->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容

Android 4.2.2(API16)

->SDK Plateform:开发时使用到的jar包->Samples for sdk:

->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API->source for android SDK:SDK全部的源代码 Extrals:

->tools:开发的工具

->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息

->gongle play service:收费服务

->google USB Driver:真实的设备驱动

开发时:基于4.0,兼容2.2、2.3.3

07、创建android模拟器

avd:android virture developer VGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)

08、ddms简介

ddms:模拟器不支持中文,因此发送中文会显示不出来

09、platform-tools的简介及常见adb指令

Android调试桥:内部实现就是socket让两个系统之间实现数据交互

->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥 dx.bat:将.class文件打包

10、android项目的目录结构

一:SDK的目录结构

->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见

相应的代码

->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像

->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器

二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容

->mark project as a library:一般不选择,意思是将这个项目提供一个

jar包供别人使用 三:文件夹目录

.setting:设置目录

assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的 apk中

bin:

gen:自动生成的目录

->builderConfig.java:生成的配置信息->R.java: Android 4.1.2->android.jar开发环境,jar包

可以在properties中修改,jar包就是SDK

011、Android下apk的安装过程

一、Android安装过程分析:

->setContentView:甚至view的对象,把里面的xml文件加载到

->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件

->apk压缩文件解压内部内容

->META-INF: 应用程序的签名

eclipse的调试签名文件

->res:资源文件

->classes.dex:class文件

->resources.arsc:资源ID映射

->android软件安装的过程:

->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名

012、常见adb指令

前提:

->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;

->设备上打开USB调试;

指令:

->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb-s emulator-5554 install c:usersadministratorhello.apk 如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到

(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端

ls:显示文件夹

ps:显示正在运行的程序 ping:网络连通性

013、创建模拟器遇到的常见错误

->路径最好不要有中文:

->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:

可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。通常情况下不会出问题,开启时候创建文件,关闭时关闭文件,但是当电脑出现不正常状态时:比如蓝屏,停电关机时候这些资源还没来得及删除,模拟器就关闭了,因此开启时这些资源仍在,程序默认模拟器被占用,因此会重新开启一个模拟器。

->模拟器没有信号:

模拟器用socket桥接在电脑上

终结解决方案是给电脑连上网,分配一个IP->常见命令操作:

14、电话拨号器

->新建文件

->界面设置:文本框、点击按钮

->:一旦获得焦点,会立刻弹出,输入文本的软键盘->ctrl+x删除->ctrl+1提示

->设置点击事件:找到空间,然后设置点击事件,再点击事件里面获得了另外一

个空间的数据,激活一个intent->获得权限:清单文件中添加uses permision

15、点击事件的四种写法

->电话拨号器的优化:

每次拨打电话都会执行的操作是:查找控件,然后找到控件的文本,拨打电

话。其实每次拨打电话文本控件已经创建好了没有必要每次查找按钮之后再 查询控件。

package cn.wqrt.mobile;

import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

public class MainActivity extends Activity {

private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(new MyListener());}

private class MyListener implementsandroid.view.View.OnClickListener{

@Override

public void onClick(View arg0){

String number = et_number.getText().toString().trim();//去除回车和空格

if(TextUtils.isEmpty(number)){

Toast.makeText(MainActivity.this, “号码不能为空”, Toast.LENGTH_SHORT).show();

return;

}

Intent intent = new Intent();

intent.setAction(intent.ACTION_CALL);

intent.setData(Uri.parse(“tel:”+number));

startActivity(intent);

}

}

@Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} }

->

1、点击事件的四种写法:

->给按钮注册点击事件:创建一个内部类定义点击事件。具体代码见上

button.setOnClickListener(new MyListener());

->

2、采用匿名内部类创建点击事件:

button.setOnClickListener(new OnClickListener()){

package cn.wqrt.mobile;

import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

public class MainActivity extends Activity {

private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View arg0){

// TODO 自动生成的方法存根

callPhone();

}

});}

@Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}

private void callPhone(){

String number = et_number.getText().toString().trim();//去除回车和空格

if(TextUtils.isEmpty(number)){

Toast.makeText(MainActivity.this, “号码不能为空”, Toast.LENGTH_SHORT).show();

return;

}

Intent intent = new Intent();

intent.setAction(intent.ACTION_CALL);

intent.setData(Uri.parse(“tel:”+number));

startActivity(intent);} } }

->

3、如果有很多的按钮点击事件,建议用这种方式:让Activity实现点击 事件的接口,每个按钮点击事件都设置成this,让该类实现 OnClickListener然后进行判断。package cn.wqrt.mobile;

import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);button.setOnClickListener(this);}

@Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}

private void callPhone(){

String number = et_number.getText().toString().trim();//去除回车和空格

if(TextUtils.isEmpty(number)){

Toast.makeText(MainActivity.this, “号码不能为空”, Toast.LENGTH_SHORT).show();

return;

}

Intent intent = new Intent();

intent.setAction(intent.ACTION_CALL);

intent.setData(Uri.parse(“tel:”+number));

startActivity(intent);}

@Override public void onClick(View v){

// TODO 自动生成的方法存根

switch(v.getId()){

case R.id.bt_dial:

callPhone();

break;

} } }->

4、在布局文件中绑定一个点击的方法,如果点击按钮就会调用这个方法,通

过反射技术试图调用这个方法

布局文件中设置: package cn.wqrt.mobile;

import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

public class MainActivity extends Activity {

private EditText et_number;@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button =(Button)findViewById(R.id.bt_dial);et_number =(EditText)findViewById(R.id.et_number);

}

@Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}

public void dialButtonClick(View v){ callPhone();}

private void callPhone(){

String number = et_number.getText().toString().trim();//去除回车和空格

if(TextUtils.isEmpty(number)){

Toast.makeText(MainActivity.this, “号码不能为空”, Toast.LENGTH_SHORT).show();

return;

}

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse(“tel:”+number));

startActivity(intent);} }

16、短信发送器

->界面的设计:两个large Text,一个Button

android:textColor 设置字体颜色

android:singleLine=“true” 设置是否是单行

android:lines=“5” 设置行数

windows下面的颜色是GBR,而android下需要输入的格式确实

RGB,所以需要转换

adb默认设置time out为5秒->内容设计:按钮-文本->判断->发送

导包的时候千万别导到gsm包,否则会显示过时;

发送没有历史记录 package com.example.sms;

import java.util.ArrayList;

import android.app.Activity;import android.os.Bundle;import android.telephony.SmsManager;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

private EditText et_number;private EditText et_content;

@Override protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button =(Button)findViewById(R.id.bt_send);

et_number =(EditText)findViewById(R.id.et_number);

et_content =(EditText)findViewById(R.id.et_content);

button.setOnClickListener(this);}

@Override public boolean onCreateOptionsMenu(Menu menu){

// Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);

return true;}

@Override public void onClick(View v){

// TODO 自动生成的方法存根

switch(v.getId()){

case R.id.bt_send:

String number = et_number.getText().toString().trim();

String content = et_content.getText().toString().trim();

if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){

Toast.makeText(this, “号码或者内容不能为空”,Toast.LENGTH_SHORT).show();

return;

}else{

SmsManager smsManager = SmsManager.getDefault();

ArrayList contents = smsManager.divideMessage(content);

for(String str:contents){

smsManager.sendTextMessage(number, null, str, null, null);

}

}

} } }

17、相对布局&单位介绍

->布局说明:

->同级控件:

android:layout_toRightOf=“" android:layout_toLeftOf=”“ android:layout_below=”' android:layout_above=“" android:layout_maginBottom=”“

->相对父控件:

android:ayout_centerInParent=”“ android: layout_centerHorizontal=”“ android:layout_centerVertical=”“ android:layout_alignParentBottom=”“ android:layout_alignParentRight=”“->对齐方式:

->文本颜色:#00000000~#ff000000(argb)文字的透明度->单位介绍:

dp也就是dip:device independent pixels(设备独立像素),是一种与密度无关的像素单位,在每英寸160点的屏幕上,1dp = 1px。不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素

1.

下载黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一)word格式文档
下载黑马程序员Android就业面试技巧系列-技术篇(敏捷开发一).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐