Android应用开发_学习笔记
更新时间:2023-07-20 13:32:01 阅读量: 实用文档 文档下载
一、Android基础及UI
1、Android程序的组成
一个Android程序一般有以下4个部分组成:
1)Activity(活动)
①、一个应用程序是由一个或者多个Activity组成。
②、一个Activity代表了可以和用户进行交互的可视化界面。
③、Activity通过布局管理添加各种View组件。
④、通过setContentView(int id)方法可以将视图呈现出来。
⑤、Activity的生命周期
图1 Activity的生命周期图
2)Broadcast Receiver(广播接收器)
①、Broadcast Receiver负责对外部事件做出响应。
②、Broadcast Receiver不生成UI,是不可见的。
③、Broadcast Receiver需要在程序中进行注册。
③、应用程序可以通过Context.sendBroadcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行时间处理。
3)Service(服务)
①、service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。比如下载数据,播放音乐等。
②、service是跑在程序的主线程中,处理耗时的事件续。
③、service没有用户界面所有用户实现的service必须继承系统的Service
类,并且在配置文件中进行注册。
4)Content Provider(内容管理器)
①、数据在Android当中是程序私有的。
②、Content Provider提供了多个程序间数据交互的机制。
③、Content Provider暴露出来一些标准的API来对数据进行操作:
query(Uri, String[], String, String[], String) :通过关键字查询数据。
insert(Uri, ContentValues) :将一组数据插入到指定的地方。
update(Uri, ContentValues, String, String[]) :更新数据。
delete(Uri, String, String[]) :删除数据。
2、AndroidManifest.xml文件组成
该文件主要声明Android应用程序的构成:
①、程序包的全局变量
②、活动(Activities)
③、内容管理器( Content Providers)
④、服务( Services)
⑤、广播接收器(Broadcast Receivers)
⑥、请求安全授权(uses-permission)
⑦、声明安全授权(permission)
4、Android主要UI组件的应用
1)Menu:如何打造友好的菜单
2)ListView:用好列表,做好程序
3)Dialog:人机友好互动交流
4)Toast和Notification:温馨的提醒
5、Menu
1)Menu与MenuItem的应用
①、Menu:负责管理MenuItem
添加一个MenuItem:add (int groupId, int itemId, int order, CharSequence title) ;
删除所有的MenuItem:clear() ;
②、MenuItem:一个菜单的条目
常用的方法:setTitle(…) ; setIcon(…) ; getItemId() ;
3)通过xml创建Menu
①、在Android工程的res/目录下新增一个menu/子目录,然后建立一个名为
②、onCreateOptionsMenu()方法里通过MenuInflater类引入定义好的菜单文件。
4)处理Menu响应事件
①、当我们点击菜单时,框架会捕获被点击的MenuItem组件,传递给相应的处理方法。
6、ListView
1)ListView介绍
ListView可以按设定的规则自动填充并展示一组数据列表。
2)创建一个最简单ListView(列表)
3)ListView与Adapter
Adapter是ListView和数据源的中间人,如下图。
图2 ListView与Adapter的关系图
4)Adapter深入分析
①、当每条数据进入看见区域时:
Adapter的getView()会被调用。
返回展示数据的View视图。
②、滚动屏幕时,会频繁调用上面步骤。
③、它可以支持上千条数据的显示。
7、Dialog(对话框)Notification
1)Dialog关系图
AlertDialog:警告对话框、ProgressDialog:进度对话框、DatePickerDialog:日期选择对话框、TimePickerDialog:时间选择对话框。
图3 Dialog关系图
2)实现一个AlertDialog(警告对话框)
3)Dialog的生命周期
图4 Dialog的生命周期图
4)创建个性化对话框
①、继承Dialog
②、重写onCreate()方法。
8、Toast(信息提示)Notification
1)Toast简介
①、Toast是Android提供的轻量级的提醒机制。
②、Toast永远不会获得聚焦。
③、Toast不会打断用户当前的操作。
④、信息在floating view呈现,然后会自动消失。
2)创建Toast
①、简单文字信息
通过make()方法创建Toast信息;
调用show()方法来显示Toast提示信息。
②、复杂Toast信息
Toast支持通过setView(view)添加view组件。
9、Status Bar Notification(状态栏通知)
1)Notification简介
①、Notification是Android提供的在状态栏的提醒机制。
②、Notification不会打断用户当前的操作。
③、Notification支持比Toast更复杂的点击事件响应。
④、NotificationManager来管理Notification。
2)创建Notification
二、Android布局
1、声明布局的两种方式
1)在XML文件中申明UI 组件
①、Android提供了从xml的节点元素,这些节点元素对应代码中的UI组件。 ②、优点:直观简洁,可读性强;实现了UI界面和逻辑代码的分离。
2)在代码中构造组件
①、在java代码中构造组件。
②、缺点:抽象模糊,可读性比较差;耦合性强,数据的表现和逻辑错杂很难。
2、布局属性
1)所有的View和ViewGroup都支持XML的属性。
2)XML的属性是可以继承的。
3)View和ViewGroup都支持下面两个属性。
3、Android中布局的盒子模型
1)View
支持padding(填充),但是不支持margin。
2)ViewGroup支持padding和margin(页边空白)。
4、FrameLayout 布局
FrameLayout对象就好比一块在屏幕上提前预订好的空白区域,然后你可以填充一些元素到里边。
注意:所有的元素都被放置在FrameLayout区域最左上的区域。而且无法为这些元素指定一个确切的位置。如果一个FrameLayout里边有多个子元素,那么后边的子元素的显示会重叠在前一个元素上。
5、LinearLayout 布局
LinearLayout是一种Android中最常用的布局之一,它将自己包含的子元素按照一个方
向进行排列。
方向有两种:①、水平Android:orientation="horizontal",子元素从左到右一个一个的水平排列;②、竖直 Android:orientation="vertical",元素从上到下一个接着一个的竖直排列。
6、RelativeLayout
RelativeLayout是一个相对布局类,RelativeLayout是一个容器,它里边的元素的位置是按照相对位置来计算的。
①、相对于其他组件的位置
②、相对于RelativeLayout的位置
7、TableLayout 布局
TableLayout 是一种表格式的布局。这种布局会把包含的元素以行和列的形式进行排列。表格的列数为每一行的最大列数。当然表格里边的单元格是可以为空。
8、Style(风格)
1)Style简介
将一个或多个属性的值应用到一个View组件当中,style可以作为一个属性用在布局文
2)定义Style
①、两个标签:<style>,<item>
9、Theme(主题)
1)Theme简介
一个或者多个属性应用到整个屏幕;theme是作为一个属性被用到Manifest
文件当中。
3)使用自定义Theme
①、在AndroidManifest.xml文件中设置Theme应用于整个工程。
10、Theme和Style对比
1)相同点
①、都定义在 <style> 的代码块当中。
②、都拥有一个或者多个Item。
2)不同点
①、影响范围不同:style针对的是单个元素;Theme针对的是整个Activity或者整个工程。
②、使用方式不同:style针对于单个组件的一个属性;Theme是在AndroidManifest.xml文件中进行使用。
三、Android事件处理、Intent及广播
1、Android处理事件的方法
1)用事件监听器(Event Listeners)来处理事件
事件监听器是一个借接口,它是由Android FrameWork(框架)来调用。
2)用Event Handlers来处理事件
2、常见的事件监听器
1)View.OnClickListener
②、当前View被点击的时候调用这个方法;或者当前View在获得焦点的时候,按下轨迹球后触发。
2)View.OnLongClickListener
①、里边只有一个方法onClick(View v)
②、当前View被点击的时候调用这个方法;或者当前View在获得焦点的时候,按下轨迹球后触发(超过1秒)。
③、相当于鼠标右键的功能。
3)View.OnFocusChangeListener
①、里边只有一个方法onFocusChange()
②、当前View焦点变化的时候onFocusChange()方法被调用。
4)View.OnKeyListener
①、里边只有一个方法onKey()
②、被调用的条件:当前组件获得焦点;用户按下键。
5)View.OnTouchListener
①、里边只有一个方法
onTouch()
②、当触摸事件传递给当前的组件的时候,注册在当前组件内部的OnTouchListener才会被执行。
3、Activity常用事件
4、Intent
1)什么是Intent
①、Intent是三大组件的粘帖剂。
②、一个Intent对象是对一次即将执行的操作的抽象描述。
2)Intent能做什么
①、通过Context.startActivity() 或者Activity.startActivityForResult() 来启动Activity。 ②、通过 Context.startService()启动一个新的服务。通过Context.bindService() 来建立客户端和服务的连接。
③、通过广播机制发送出去的Intent将会传给所有监听此Intent的broadcast receivers(广播接收者)。
3)剖析Intent
①、一个Intent对象主要包含六类信息。
②、并非每个都需要包含这六类信息。
图5 Intent包含的六类信息
5、Intent的属性
1)Compnent name
Component(组成)属性明确指定Intent的目标组件的类名称。通常 Android框架会根据Intents 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再 执行上述查找过程。指定了这个属性以后,Intents的其它所有属性都是可选的。
2)Action
①、Action(操作):对执行动作的描述。
②、系统自定义的Action:
ACTION_MAIN ,我们最熟悉的一个。 "Android.Intents.action.MAIN",这个值在每个AndroidManifest.xml文档中都可以看到。它标记当前Activity作为一个程序的入口。 ACTION_VIEW,将数据 显示给用户。 ACTION_VIEW通常和特定的data相配合使用,用于给用户显示数据。
ACTION_DIAL,用于描述 给用户打电话的动作,通过和data配合使用,将会触 发给特定data的用户打电话。
ACTION_PICK,从特定的一组数据中进行选择数据操作。
ACTION_EDIT ,编辑特定的数据。
ACTION_DELETE ,删除特定的数据。
③、也可以定义自己的Action
3)Data
Data(数据):对于这次动作相关联的数据进行描述。以联系人应用为例,以下是一些action / data对,及其它们要表达的意图。
①、VIEW_ACTION content://contacts/1:显示标识符为"1"的联系人的详细信息。 ②、EDIT_ACTION content://contacts/1:编辑标识符为"1"的联系人的详细信息。 ③、VIEW_ACTION content://contacts/:显示所有联系人的列表。
④、PICK_ACTION content://contacts/:显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如: 电子邮件客户端可以使用这个Intents,要求用户在联系人列表中选择一个联系人。
4)Category
Category(类别):对执行动作的附加信息进行描述。
例如:CATEGORY_HOME:显示桌面的Activity。
5)Extras
Extras(附件信息):其他一切附加信息的描述。
6)Flags
Flags(标记):指导如何来启动一个Activity。
6、两类不同的Intent
1)直接Intents
指定了component属性的Intents(调用setComponent(ComponentName)或setClass(Context, Class)来指定)。通过指定具体的组类,通知应用启动对应的组件。
2)间接Intents
没有指定ComponentName属性的Intents。这些Intents需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intents的组件。
在这个解析过程中,Android是通过Intents的action、type、category这3个属性来进行判断的,如下图。
7、Android中的广播机制
1)BroadCast
程序可以注册广播接收器,系统会将用于广播的Intent发送给满足要求的广播监听器。用户可以在广播监听器里边执行自己需要的操作。
2)如何发送广播
程序主动广播Intents是比较简单。在程序中只需要构造好一个Intents,然后调用
3)如何处理广播
②、注册BroadcastReceiver
Ⅰ、在AndroidManifest.xml文件当中进行注册
Ⅱ、在代码当中直接进行注册
四、Android数据存储及Service
1、Android中的三种数据存储方式
1)Preferences机制
①、Preferences的特点:轻量级的;保存的是原始数据类型的名值对;经常用于保存程序配置信息。
②、SharedPreferences使用
通过Context.getSharedPreferences()得到一个SharedPreferences
获取一个Editor,对保存的参数进行编辑
2)SQLite数据库存储
①、Android提供新建和使用SQLite 数据库的API
②、数据库都是私有的
③、数据文件保存在设备上的一下路径:/data/data/package_name/databases/my.db
3)content provider
2、SQLite创建和使用
1)SQLiteOpenHelper
负责管理数据库新建和数据库版本升级的辅助类。需要实现这个抽象类,该类含有的方法如下:
2)SQLiteDatabase
SQLiteDatabase里边的方法可以用来执行各种sql语句,比如新建,删除等。数据库的名字在当前程序当中必须保证唯一性。
3、SQLite数据库中的常见操作
1)新建数据库
2)新建数据表
3)删除数据表
4)插入数据
5)删除数据
6)更新数据
4、Cursor(指针)
Cursor提供了随机读写从数据库当中返回的结果集的接口,它是一个很有用的东西,在很多地方都能用的上 。
典型的是,一般从数据 库中返回的结果集都是以Cursor形式进行访问的。
返回新的Cursor,这个时候Cursor里边的指针指向的是 -1,只有当调用Cursor.moveNext()方法后这个指针才指向真正数据的第一项。
访问(query)完数据的每一项的步骤
①、首先得到一个Cursor后,先进行Cursor.moveNext(),让它移到真正的数据的第一项。
②、再调用下边的方法进行把这一行数据里边特定列的数据,也就是特定数据库表
5、SQLite的调试
命令行 调试:
①、进入到shell界面:adb shell
②、进入到sqlite3管理界面:sqlite3 /data/data/ <package_name>/databases/
举例:
C:\>adb shell
# sqlite3 /data/data/.ztenc.SQLite/databases/dbForTest.db
如果想回到shell界面:CTRL+D.或者执行sqlite> .exit
6、ContentProvider
1)ContentProvider简介
ContentProvider 是Android应用程序的四大组成部分之一。ContentProvider提供了这么一种机制:通过ContentProvider
不同程序之间可以共享数据。
如果你想让你的程序里边的数据共享出来给其他程序来用,那么只有两种方法:
①、自己实现一个Content Provider
②、将数据写到别的Content Provider里边
2)通过content Resolver来获取content Provider里边的数据
7、Service
1)创建Service
继承android.app.Service实现自己的服务
2)注册service
<service android:name="MyService"> </service>
3)启动service
startService(Intent service) ;
4)停止service
stopService(Intent service) ;
8、Service的生命周期
1)startService
①、service没有创建,则先调用onCreate方法,然后调用onStart方法。
②、service已经创建,则直接调用onStart方法。
2)stopService
调用onDestory最终销毁service。
五、Android开发进阶
1、一些标准操作的时间比较
2、用户体验的三个核心特征
1)快速
①、尽可能避免创建对象
②、使用Native方法
③、缓冲属性调用
④、尽可能避免接口引用实例对象
⑤、声明Final常量
⑥、避免浮点型数据的使用
2)响应
①、在Android中,程序的响应性被Activity Manager和Window Manager这两个系统服务所监视。当出现下列情况是,Android会认为该程序无响应:5秒内没有响应用户输入事件(如键盘输入);一个BroadcastReceiver 执行十秒还没有完成。
②、ANR--Application Not Responding(响应)
应用程序的执行在你的主线程里超过一段时间就会导致弹出ANR对话框;任何主线程的方法都不能做很复杂的处理,特别是Activity对象在它的关键生命周期函数里面不能处理太多,例如onCreate()和onResume()。
主线程应该提供一个Handler给子线程去返回完成信息
③、加强响应性方法
应用程序正在后台运行并响应用户输入进程正在创建:使用ProgressBar和
正在阅读:
Android应用开发_学习笔记07-20
《每一个孩子都是天使》03-08
MC9S08AC16控制的光电寻迹智能车03-14
教育教学基本功竞赛教育理论考核03-20
保持共产党员先进性教育读本11-08
我们的爱情现代诗歌03-21
2014年北师大四年级数学上《近似数》培优卷(含答案)11-02
月经期间该注意什么02-09
新课程高中数学测试题组(必修5)含答案04-09
描写梨花的好句好段优美段落02-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 应用开发
- Android
- 笔记
- 学习
- 城市河道水位远程监测系统设计 外文翻译
- 张文志汽车定速巡航系统
- 新东方BEC中高级词汇(2012最新版)
- 基于51单片机和DAC0832的信号源(proteus电路图加程序)
- The trace formula for quantum graphs with general self adjoint boundary conditions
- 初中语文古诗词精选
- 生猪标准化规模养殖场建设项目实施方案
- 2015陕西公务员考试时政热点:2015年7月份国内时政重点汇总(一)
- 一起工业锅炉氧腐蚀案例分析及防腐措施
- 数据结构实验 查找
- 4.4 理想溶液和非理想溶液
- 第十三章 国家预算和预算管理体制(财政学,魏学辉)
- 牵手世园,伴美家园
- 人工种植铁皮石斛技术和病虫害防治
- 第五单元抽屉原理习题(附答案) (1)
- 《生活与哲学》同步训练2.2唯物主义和唯心主义
- 仪器设备期间核查作业指导书
- 英语专业毕业论文选题
- 2013-2018年中国玻璃钢管行业市场分析及投资可行性研究报告
- 车仆润滑油项目推广方案