android开发笔记基础篇.docx
- 文档编号:4381036
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:26
- 大小:499.44KB
android开发笔记基础篇.docx
《android开发笔记基础篇.docx》由会员分享,可在线阅读,更多相关《android开发笔记基础篇.docx(26页珍藏版)》请在冰豆网上搜索。
android开发笔记基础篇
Android开发笔记
文件编号:
YH
受控状态:
受控
程序版本:
受控期限:
永久
起草人:
起草日期:
2013-10-24
审核人:
审核日期:
批准人:
批准日期:
分发号:
YH
分发日期:
密级:
机密
©版权所有不得复制
本文包含信息的所有权归本人。
未经本人书面许可,任何人不得复制或泄露这些信息给其他XX的人。
文档控制记录
序号
修改状态
修改内容
修改人
完成时间
V1.0
创建文档
完成本文档的所有章节内容
2013-10-24
目录
文档控制记录2
1、引言3
2、Android简介5
2.1、android框架5
2.2、android开发环境5
3、Android四大核心组件7
3.1、Activity7
3.1.1Activity概述7
3.1.2Activity生命周期8
3.1.3Activity生命周期图解9
3.2、Service10
3.2.1Service概述10
3.2.2Service特点10
3.2.3Service两种类型10
3.2.4Service生命周期11
3.3、BroadcastReceiver12
3.3.1BroadcastReceiver概述12
3.3.2BroadcastReceiver使用12
3.4、ContentProvider13
3.3.1ContentProvider概述13
4、Android应用核心Intent14
4.1、Intent简介14
4.2、Intent构成15
4.3、Intent的公共构造函数15
4.4、IntentFilter介绍15
5、Android用户界面16
5.1、Android用户界面之布局16
5.2、Android用户界面之常用控件18
5.2.1ListView18
5.2.2UIcontrols19
5.2.3BaseAdapter33
5.3、Android后退事件处理35
附录、经典示例38
1、计算器38
1、引言
目的:
学习android编程时,所做笔记,后期会一一添加;
2、Android简介
2.1、android框架
2.2、android开发环境
Eclipse+ADT+Android_SDK
3、Android四大核心组件
3.1、Activity
3.1.1Activity概述
1、Activity是一个程序的组件之一。
它的主要功能是提供界面。
一个程序一般由多个Activity组成,各activities之间关系很松散,它们之间没有直接的关联。
必须有一个activity被指定为主activity,它是程序启动时首先显示的界面。
每个activity都可以随意启动其它的activity。
每当一个activity被启动,则前一个activity就被停止。
一个程序中的所有启动的activity都被放在一个栈中,所以被停止的activity并没有销毁,而在存于栈中。
新启动的activity先被存放于栈中,然后获得输入焦点。
在当前活动的activity上点返回键,它被从栈中取出,然后销毁,然后上一个activity被恢复。
当一个activity因为新的activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知activity,这些回调方法被统称为“生命周期回调方法”。
这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。
3.1.2Activity生命周期
∙-Activity的完整生命周期:
自第一次调用onCreate()开始,直至调用onDestroy()为止。
Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。
例如,如果Activity有一个线程在后台运行从网络上下载数据,它会在onCreate()创建线程,而在onDestroy()销毁线程。
∙-Activity的可视生命周期:
自onStart()调用开始直到相应的onStop()调用结束。
在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。
在这两个方法之间,可以保留用来向用户显示这个Activity所需的资源。
例如,当用户不再看见显示的内容时,可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。
onStart()和onStop()方法可以随着应用程序是否为用户可见而被多次调用。
∙-Activity的前台生命周期:
自onResume()调用起,至相应的onPause()调用为止。
在此期间,Activity位于前台最上面并与用户进行交互。
Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause()方法。
当Activity获得结果或者接收到新的Intent时会调用onResume()方法。
3.1.3Activity生命周期图解
注:
Activity的数据传递(通过Intent和资源树的方式)
Intenti=newIntent(MainActivity.this,Aty1.class);
//资源树
Bundledata=newBundle();
data.putString("txt","HelloAty1");
i.putExtras(data);
startActivityForResult(i,0);
3.2、Service
3.2.1Service概述
Service是Android系统的后台服务组件,适用于开发无界面、长时间运行的应用功能。
Service的本质就是响应客户端请求,要提供服务,就必须建立接收请求,处理请求,应答客服端的框架。
3.2.2Service特点
1、没有用户界面;
2、比处于非活动状态的Activity优先级高,不会轻易被Android系统终止。
即使Service被系统终止,在系统资源恢复后Service也将自动恢复运行状态;
3、用于进程间通信(InterProcessCommunication,IPC),解决两个不同Android应用程序进程之间的调用和通讯问题;
3.2.3Service两种类型
1、本地服务(LocalService):
用于应用程序内部,该服务依附在主进程上。
Local服务因为是在同一进程因此不需要IPC,也不需要AIDL。
相应bindService会方便很多。
2、远程服务(RemoteService):
用于android系统内部的应用程序之间,该服务是独立的进程。
由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。
3.2.4Service生命周期
全生命周期开始:
onCreate()事件回调函数,完成Service的初始化工作结束:
onDestroy()事件回调函数,释放Service所有占用的资源;
活动生命周期开始:
onStart()事件回调函数结束:
但没有与之对应的(OnStop())函数,因此可以近似认为活动生命周期也是以onDestroy()标志结束。
3.3、BroadcastReceiver
3.3.1BroadcastReceiver概述
Broadcast是广播,和Android内的事件一样,它可以发出一个广播(事件),注册了该广播接收器(事件监听器)的所有组件都会接收到该广播,从而调用自己的响应方法(事件响应处理)。
只不过事件处理机制是程序级,而广播是系统级别的。
它们还有一个共同点,都是通过Intent来操作的。
广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。
然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
3.3.2BroadcastReceiver使用
定义一个广播接收器,这是必须做的一步,无论是使用系统内置的广播事件还是自定义事件,否则程序将无法响应广播。
定义广播接收器比较简单,继承BroadcastRecieve类,重写onRecieve方法,该方法是在接收到广播时调用。
定义好广播接收器后,需要注册它,有两种方法,一种是选择在Mainfest.xml文件里注册;另外一种是同代码注册。
定义发起广播的组件,比如:
在Activity类里的添加一个Button,点击它发出广播,这个过程是通过sendBroadcast(Intentintent)来实现的。
3.4、ContentProvider
3.3.1ContentProvider概述
ContentProvider,内容提供器,与内容(数据)的存取(存储、获取)有关,是Android应用程序的四大组成部分之一。
是android中的跨应用访问数据机制。
当一个程序需要把自己的数据暴露给其他程序使用时,该程序就可以通过提供ContentProvider来实现,其他应用程序就可以通过ContenResolver来操作ContentProvider暴露的数据。
应用程序通过ContentProvider开放了自己的数据,该应用程序不需要启动其他应用程序都可以操作开放的数据,包括增删改查操作。
4、Android应用核心Intent
4.1、Intent简介
Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
Intent这个英语单词的本意是“目的、意向”等,对于很多程序元来说,这可能是一个不太容易理解的抽象概念,因为它与我们平常使用的简单函数/方法调用,或者通过库调用接口的方式不太一样。
在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。
Intent的两种基本用法:
一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度有所差别;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。
注意:
//显式Intent,也可用setClass(Context,Class);
Intenti=newIntent();
i.setComponent
(newComponentName("cn.eoe.intents","cn.eoe.intents.Aty1"));
无需intent-filter
//隐式Intent
Intenti=newIntent("cn.eoe.intents.intent.action.Aty1");
startActivity(i);
相关AndroidManifest.xml添加:
name="Aty1"> name="cn.eoe.intents.intent.action.Aty1"/> name="android.intent.category.DEFAULT"/> 4.2、Intent构成 1、组件名称—Componentname在Intent的查找组件策略中,其中的一种方法是显示查找,直接通过组件名称来查找。 2、动作-Actionaction是指Intent将要执行的动作,是一个字符串常量。 在Intent类里面定义了大量的Action常量属性,例如: ACTION_CALL(打电话)等。 3、数据-Datadata属性是执行动作的Url和MIME类型,不同的action有不同的data数据指定。 4、分类-CategoryCategory属性是一个执行Action的附加信息,他包含了需要处理Intent的组件的种类的信息。 5、附加信息—Extras传递给目标组件的键值对信息,是所有附加信息的集合 4.3、Intent的公共构造函数 1、Intent()空构造函数 2、Intent(Intentintent): 拷贝构造函数 3、Intent(Stringaction): 指定action类型的构造函数 4、Intent(Stringaction,Uriuri): 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider 5、Intent(ContextpackageContext,Class >.class): 传入组件的构造函数,也就是上文提到的,显示Intent; 6、Intent(Stringaction,Uriuri,ContextpackageContext,Class >cls): 前两种结合体 4.4、IntentFilter介绍 活动、服务、广播接收者为了告知系统能够处理哪些隐式Intent,它们可以有一个或多个Intent过滤器。 每个过滤器描述组件的一种能力,即乐意接收的一组Intent。 实际上,它筛掉不想要的Intents,也仅仅是不想要的隐式Intents。 一个显式Intent总是能够传递到它的目标组件,不管它包含什么;不考虑过滤器。 但是一个隐式Intent,仅当它能够通过组件的过滤器之一才能够传递给它。 一个Intent过滤器是一个IntentFilter类的实例。 因为Android系统在启动一个组件之前必须知道它的能力,但是Intent过滤器通常不在java代码中设置,而是在应用程序的清单文件(AndroidManifest.xml)中以元素设置。 但有一个例外,广播接收者的过滤器通过调用Context.registerReceiver()动态地注册,它直接创建一个IntentFilter对象。 一个Intent过滤器有对应于Intent对象的动作、数据、种类的字段。 过滤器要检测隐式Intent的所有这三个字段,其中任何一个失败,Android系统都不会传递Intent给组件。 然而,因为一个组件可以有多个Intent过滤器,一个Intent通不过组件的过滤器检测,其它的过滤器可能通过检测。 5、Android用户界面 5.1、Android用户界面之布局 线型布局(LinearLayout) ∙LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。 如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。 如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。 单帧布局(FrameLayout) ∙FrameLayout是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。 显示效果如下,第一个TextView被第二个TextView完全遮挡,第三个TextView遮挡了第二个TextView的部分位置。 表格布局(TableLayout) ∙TableLayout顾名思义,此布局为表格布局,适用于N行N列的布局格式。 一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。 相对布局(RelativeLayout) ∙RelativeLayout按照各子元素之间的位置关系完成布局。 在此布局中的子元素里与位置相关的属性将生效。 例如android: layout_below,android: layout_above等。 子元素就通过这些属性和各自的ID配合指定位置关系。 注意在指定位置关系时,引用的ID必须在引用之前,先被定义,否则将出现异常。 绝对布局(AbsoluteLayout) ∙AbsoluteLayout是绝对位置布局。 在此布局中的子元素的android: layout_x和android: layout_y属性将生效,用于描述该子元素的坐标位置。 屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。 在此布局中的子元素可以相互重叠。 在实际开发中,通常不采用此布局格式,因为它的界面代码过于刚性,以至于有可能不能很好的适配各种终端。 注意: android: layout_weight: 分割父级容器的比例 5.2、Android用户界面之常用控件 5.2.1ListView 1、ListView概念 ListView是用来显示一个列表的控件。 它在android源代码中是继承AbsListView类的,而AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。 2、常用方法 ∙android: choiceMode规定此ListView所使用的选择模式。 缺省状态下,list没有选择模式。 ∙android: divider规定List项目之间用某个图形或颜色来分隔。 ∙android: dividerHeight分隔符的高度。 若没有指明高度,则用此分隔符固有的高度。 ∙android: entries引用一个将使用在此ListView里的数组。 若数组是固定的,使用此属性将比在程序中写入更为简单。 ∙android: footerDividersEnabled设成flase时,此ListView将不会在页脚视图前画分隔符。 此属性缺省值为true。 属性值必须设置为true或false。 ∙android: headerDividersEnabled设成flase时,此ListView将不会在页眉视图后画分隔符。 此属性缺省值为true。 属性值必须设置为true或false。 注意: 1、ArrayAdapter泛型数组(数据适配器)和BaseAdapter自定义列表项的使用! 2、BaseAdapter的getView函数的优化机制convertView不为空的时候使用,减少内存资源的消耗; 5.2.2UIcontrols 5.2.2.1RadioGroup RadioButton和RadioGroup的关系 1、RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器 2、每个RadioGroup中的RadioButton同时只能有一个被选中 3、不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中 4、大部分场合下,一个RadioGroup中至少有2个RadioButton 5、大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置 5.2.2.2CheckBox 1、CheckBox是多项选择,允许用户用列表中选择一个或多个选项。 它在android源代码中是继承CompoundButton类的,而CompoundButton类是继承于Button类的。 2、CheckBox和Button一样,也是一种古老的控件,它的优点在于,不用用户去填写具体的信息,只需轻轻点击,缺点在于只有“是”和“否”两种情况,但我们往往利用它的这个特性,来获取用户的一些信息。 5.2.2.3DatePicker DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并允许用户对其修改。 如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateSetListener监听器。 5.2.2.4TimePicker TimePicker也继承自FrameLayout类。 时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。 如果要捕获用户修改时间数据的事件,便需要为TimePicker添加OnTimeSetListener监听器。 5.2.2.5Spinner ∙概述 oSpinner是一个每次只能选择所有项的一个项的控件。 它的项来自于与之相关联的适配器中,及下拉列表. ∙重要属性 oandroid: prompt: 当Spinner对话框关闭时显示该提示 ∙重要方法 ∙ osetPrompt(CharSequenceprompt): 设置当Spinner对话框关闭时显示的提示 ∙ operformClick(): 如果它被定义就调用此视图的OnClickListener ∙ osetOnItemClickListener(AdapterView.OnItemClickListenerl): 当项被点击时调用 ∙ oonDetachedFromWindow(): 当Spinner脱离窗口时被调用。 注意: //设置监听器,此为选择监听器 spinner.setOnItemSelectedListener(newSpinnerListener()); //实现监听器的方法 classSpinnerListenerimplementsOnItemSelectedListener { publicvoidonItemSelected(AdapterView >adapterView,Viewview, intposition,longid) { //TODOAuto-generatedmethodstub Stringselected=adapterView.getItemAtPosition(position) .t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 开发 笔记 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)