1、Android复习纲要第一章 Android入门基础1、教学要求 了解通信技术,包括1G、2G、3G、4G技术。 掌握开发环境的搭建,学会Android Studio搭建开发环境。 掌握Android程序的开发,并能够手动开发HelloWorld程序。2、通信技术 第一代通信技术(1G):是指最初的模拟信号、仅限语音的蜂窝电话标准。类似于简单的无线电台,通话锁定在固定频率上,不安全。 第二代通信技术(2G):是指第2代移动通信技术,代表为GSM,以数字语音传输技术为核心。具有接收数据的功能,信号和通话质量好,技术实现简单等特点。 第三代通信技术(3G):是指将无线通信与国际互联网等多媒体通信结
2、合的新一代移动通信系统。声音和数据的传输速度有了较大的提升。 第四代通信技术(4G):又称IMT-Advanced技术,它包括了TD-LTE 和 FDD-LTE。速度非常快,可传输高质量视频和图像。IMT-International Mobile Telecommunications Advanced(高级国际移动通信)3、什么是Android操作系统Android操作系统最初是由安迪罗宾(Andy Rubin)开发出的,2005年被Google收购,并于2007年11月5日正式向外界展示了这款系统。Android是一款符合环保概念的移动操作系统,轻薄短小,功能强大。是第一个真正为手机打造的开
3、放性系统。2008年9月发布Android第1个版本。Android系统一经推出,版本升级非常快,几乎每隔半年就有一个新的版本发布。4、Android操作系统的体系结构6、Android的虚拟机Dalvik是Google公司自己设计用于Android平台的虚拟机,它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。Java虚拟机与Android虚拟机的区别Java虚拟机是基于栈的架构,在连续内存空间上,读取和存入不方便。Dalvik虚拟机是基于寄存器的架构,缓存在CPU上,存取速度要快的多。它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。说明:Android的Dal
4、vik虚拟机默认给每一个应用程序分配16MB的内存,如果Android加载的资源超过这个内存,会抛出OutofMemoryError异常。6、Android的开发平台(1)Android studio(2)DDMS全称Dalvik Debug Monitor Service,它是Android开发环境中Dalvik虚拟机调试监控服务。DDMS作为IDE、emultor、真机之间的桥梁,将捕捉到终端的ID通过ADB建立调试桥,从而实现发送指令到测试终端的目的。(3)Android工程的目录结构(4)Android程序打包过程7、Android的程序结构第二章 Android UI开发1、教学要求
5、 掌握相对布局、线性布局、帧布局的使用。 了解表格布局、网格布局、绝对布局的使用。 学会使用样式和主题,创建不同风格的布局。 学会使用单元测试Junit测试程序。 学会使用LogCat快速定位日志信息。 2、UI概述 在Android应用中,UI(User Interface)界面是人与手机之间数据传递、交互信息的重要媒介和对话接口。Android程序开发最重要的一个环节就是界面处理,界面的美观度直接影响用户的第一印象,因此,开发一个整齐、美观的界面是至关重要的。 Android应用的界面是由View和ViewGroup对象构建而成的。View类是Android系统平台上用户界面表示的基本单元
6、,View的一些子类被统称为Widgets(工具),它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。 ViewGroup是View的一个扩展,它可以容纳多个View,通过ViewGroup类可以创建有联系的子View组成的复合控件。3、Android界面的布局 在Android应用程序中,界面是通过布局文件设定的。 布局文件采用XML格式,每个应用程序默认包含一个主界面布局文件,该文件位于项目的“res/layout”目录中。 通过android:layout_width和android:layout_height属性来指定Layout和空间的宽和高。 match_parent:表示强
7、制扩展视图以显示全部内容,从而填充布局单元尽可能多的空间。 wrap_content:表示强制性地扩展视图以显示全部内容,以wrap_content为例,设置该属性将完整显示其内部文本。相当于AutoSize,控件会随着内容增大或缩小。 orientation gravity layout_gravity padding app的默认布局文件会在MainActivity中的OnCreate()方法中,通过代码setContentView()将Activity加载到View对象中。当运行程序时,才能在界面上看到编写好的布局。 setContentView()的参数为.布局资源名称。 布局文件的添
8、加,主要在Layout文件夹上点右键,以此选择New-Android XML File,在弹出的窗口中选择相应的布局,并填写文件名称即可。4、Android中的布局的种类LinearLayout线性布局有两种方式指定控件位置,一种是水平方向,一种是竖直方向。设置线性布局为水平或垂直显示需要设置的属性。RelativeLayout像素单位(px,pt,dp,sp)TableLayout表格布局就是让控件以表格的形式来排列组件的,只要将组件或信息放在单元格中,控件就可以整齐的排列。 在TableLayout中,行数由TableRow对象控制的,即布局中有多少TableRow对象,就有多少行。Gri
9、dLayout网格布局是新增的布局,它实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。网格布局用一组无限细的直线将绘图区域分成行、列和单元,并指定控件的显示区域和控件在该区域的显示方式。FrameLayout帧布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。采用帧布局设计界面时,只能在屏幕左上角显示一个控件,如果添加多个控件,这些控件会按照顺序在屏幕的左上角重叠显示,且会透明显示之前控件的文本。AbsoluteLayout绝对布局需要通过指定x、y坐标来控制每一个控件的位置,放入该布局的组件需要通过android:layout_x和and
10、roid:layout_y两个属性指定其准确的坐标值,并显示在屏幕上。5、样式与主题 Android系统中,包含了很多定义好的样式和主题,这些样式和主题用于定义布局显示在界面上的风格。 样式:用于定义界面元素显示风格,包含一个或多个View控件属性集合。样式只能作用于单个View,使用样式可以指定多个控件的相同属性,减少代码书写量。 主题:也是包含一个或多个View控件属性集合。它可以影响多个View,是全局性的。主题通过在中的结点和来确定主题的应用范围是整个应用,还是单个Activity。 注意:如果一个应用使用了主题,同时单个view也使用了样式,在属性冲突时,样式优先级高。 尽管Andr
11、oid系统提供了很多样式和主题,但有时这些效果并不能满足实际需求,此时还可以自定义样式或者主题。 6、国际化国际化是指软件开发时,应该具备支持多种语言和地区的功能,为不同国家和地区的用户,提供符合来访者阅读习惯的页面或数据。由于国际化Internationalization这个单词的首字母“I”和尾字母“N”之间有18个字符,因此国际化被简称为I18N。为了提供不同语言版本,开发者只需要在res目录下新建对应的values文件夹。values文件夹的命名规则。7、单元测试 JUnit是一个测试框架,它是Android 加入的自动化测试功能。在完成某个功能后对该功能进行单独测试,而不需要把程序安
12、装到手机或模拟器中进行测试,这样会大大提高程序开发的准确性。 JUnit单元测试既可以嵌入到项目中,也可以作为一个单独的项目,针对某个项目进行测试。具体步骤如下: 1)配置JUnit环境 2)创建测试类3)运行测试 配置Junit环境,在进行Junit测试时,首先需要在的结点下配置指令集,以及在结点配置函数库。8、程序调试LogCat用于输出Android程序中的日志信息。它支持五种输出方式,级别由低到高分别是:Verbose(V):显示全部信息,黑色,可通过()等方法进行信息输出。Debug(D):显示调试信息,蓝色Info(I):显示一般信息,绿色Warning(W):显示警告信息,橙色E
13、rror(E):显示错误信息,红色Assert(A):新增加的日志级别9、Toast的使用 Toast会显示一个小消息告诉用户一些必要信息,该消息在短时间内自动消失,不会干扰用户操作。 Toast组件有两个方法makeText()和show(),其中makeText()方法用于设置需要显示的字符串,show()方法显示消息框。 Toast toast = (Context,Text,Time); (); 简写形式如下:(context,这是弹出消息!,0).show();第三章 Activity 1、教学要求 掌握Activity的生命周期。 掌握Activity的4种启动模式。 掌握隐式意图
14、和显式意图的使用。 学会使用Intent传递数据。 学会Activity之间数据传递与回传2、Activity相关定义 Activity是Android应用程序的四大组件之一,它负责管理Android应用程序的用户界面。一个应用程序一般会包含若干个Activity,每一个Activity组件负责一个用户界面的展现。 Activity是通过调用setContentView()方法来显示指定组件的。该方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。 Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,支持多种操作事件,如:onKeyDow
15、n(int keyCode,KeyEvent event)、onKeyUp(int keyCode,KeyEvent event)、onTouchEvent(MotionEvent event)等。3、Activity的创建在Android应用中,可以创建一个或多个Activity,创建步骤如下所示:1)定义一个类继承自或者其子类;2)在res/layout目录中创建一个xml文件,用于创建Activity的布局;3)在文件中注册Activity;4)重写Activity的onCreate()方法,并在该方法中使用setContentView()加载指定的布局文件;4、Activity的生命周
16、期生命周期就是一个对象从创建到销毁的过程,每一个对象都有生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态: 运行状态:当Activity在屏幕的最前端时,它是可见的、有焦点的。 暂停状态:Activity对用户来说仍然是可见的,但它不再拥有焦点。 停止状态:当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。然而这些对用户来说都是不可见的。Activity从一种状态转变到另一种状态时会触发一些事件,执行一些回调方法来通知状态的变化。 void onCreate(Bundle saveInstanceState):创建时
17、执行。 void onStart():可见时执行 void onRestart():回到前台,再次可见时执行 void onResume():获取焦点时执行 void onPause():失去焦点时执行 void onStop():用户不可见,Activity进入后台时执行 void onDestroy():被销毁时执行 记住下图给出的Activity生命周期过程中的一些回调函数执行的状态和过程。 当Activity从启动到关闭时,会依次执行onCreate() -onStart()-onResume()-onPause()-onStop()-onDestroy()方法。 当Activity执
18、行到onPause()方法失去焦点时,重新调用回到前台会执行onResume()方法,如果此时进程被杀死,则Activity会重新执行onCreate()事件。 当执行到onStop()方法Activity不可见时,再次回到前台会执行onStart()方法,如果此时进程被杀死,Activity会重新执行onCreate()事件。5、View点击事件的监听Android程序中,设置View的点击事件监听共有四种,分别:1)在布局文件中为控件设置onClick属性指定点击方法;2)创建一个内部类实现OnClickListener接口并重写onClick()方法,之后需要为控件设置setOnClic
19、kListener(Listener listener);3)主类中实现OnclickListener接口,然后重写onClick();4)创建匿名内部类,即在为控件设置监听时直接创建一个OnClickListener实例,并为该实例指定名称。6、Activity的启动模式 Android采用任务栈的方式来管理Activity实例。当启动一个应用时,操作系统就会为其创建一个任务栈。先启动的Activity被压入栈底,后启动的Activity放在栈顶,通过启动模式可以控制Activity在任务栈的加载情况。 Activity的启动模式有四种,分别是standard、singleTop、singl
20、eTask和singleInstance。 在中,可以通过标签的android:launchMode属性设置启动模式。7、Activity之间数据传递的方式Intent是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。Intent启动Activity的方法有:startActivity(Intent intent) startActivityForResult(Intent intent, int code)显式意图即在通过Intent启动Activity时,需明确指定激活组件的名称。如果需要在本应用中启动其他的Acti
21、vity时,可以使用显式意图来启动Activity。Intent intent = new Intent(this, ; startActivity(intent); 显式意图还可以根据目标组件的包名、全路径名来指定开启组件(,);startActivity(intent);隐式意图没有明确指定组件名的Intent称为隐式意图。系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件。使用隐式意图开启Activity的示例代码如下所示: Intent intent = new Intent();ListView的优化1) 复用Conve
22、rtView2) 使用ViewHolder类第六章 广播接收者1、教学要求学会自定义广播。掌握有序广播和无序广播的使用。掌握常用广播接收者(开机启动,短信接收)的使用。2、广播接受者的创建与注册要使用广播接收者接收其他应用程序发出的广播,先要在本应用中创建广播接收者并进行注册。注册广播有两种方式,常驻型广播和非常驻型广播。 1、创建广播接收者public class MyBroadcastReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) (2)bin
23、dService方式开启服务的生命周期当其他组件调用bindService()启动服务时,服务被创建,接着客户端通过Ibinder接口与服务通信。客户端通过unbindService()方法关闭连接,多个客户端能绑定在同一服务上,并且当他们都解绑时,系统将直接销毁服务(服务不需要被停止)。随着服务的启动,会执行onCreate() onBind()方法,服务处于绑定状态, 客户端通过unbindService()方法关闭连接,解除绑定时,系统将直接销毁服务,服务不需要被停止。 这种方式开启的服务与开启者的状态有关,当调用者销毁了,服务也会被销毁。startService方式与bindServi
24、ce方式开启服务时,服务生命周期中所执行的方法时不同的,如:onCreate():第一次创建服务时执行的方法onDestroy():服务被销毁时执行的方法onStartCommand():客户端通过调用startService(Intent, Service)显示启动服务时执行该方法。onBind():客户端通过调用bindService(Intent, Service, int)启动服务时执行该方法。onUnbind():客户端调用unBindService(ServiceConnection conn)断开服务绑定时执行的方法。这些方法都是Service生命周期中重要的回调方法,通过这些方
25、法可以观察服务的创建、开启、绑定、解绑、销毁等过程。4、服务的启动方式使用startService()方式开启服务的具体代码如下所示: Intent intent = new Intent(this, ; (intent); (intent); 服务也是Android中的四大组件之一,因此需要在清单文件中注册 bind方式启动服务当程序使用startService()和stopService()启动、关闭服务时,服务与调用者之间基本不存在太多的关联,也无法与访问者进行通信、数据交互等。如果服务需要与调用者进行方法调用和数据交互时,应该使用bindService()和unbindService(
26、)启动、关闭服务。bindService(Intent service,ServiceConnection conn, int flags) Intent对象用于指定要启动的Service ServiceConnection对象用于监听调用者与Service的连接状态。 flags指定绑定时是否自动创建Service(如果Service还未创建)。5、服务的通信本地的通信在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信。本地服务通信是指应用程序内部的通信,而远程服务通信是指两个应用程序之间的通信。使用这两种方式进行通信时必须满足一个前提,就是服务必须以绑定方
27、式开启。在进行本地服务通信时,可以使用Service类提供的IBinder onBind(Intent intent)方法,该方法返回的IBinder对象会作为参数传递给ServiceConnection类中onServiceConnected(ComponentName name,IBinder service)方法,这样访问者就可以通过IBinder对象与Service进行通信。 远程通信远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言(Interface Definition Language),其语法格
28、式非常简单,与Java中定义接口很相似。 但还存在差异:1、AIDL定义接口的源代码必须以.aidl结尾2、AIDL接口中用到的数据类型,除基本类型,String,CharSequence,List,Map之外,其他类型全部需要导入包,即使他们在同一个包中。定义AIDL接口,实质上只是定义了进程间通信接口,服务端、客户端都需要使用Android SDK目录下的platform-tools子目录下的工具为该接口提供实现。如果使用ADT工具进行开发,则ADT会自动实现AIDL接口。 远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是
29、一种接口定义语言(Interface Definition Language),其语法格式非常简单,与Java中定义接口很相似。 package IService String getName(); int getPrice(); 定义好AIDL接口之后,接着需要在应用程序中创建Service的子类。该Service的onBind()方法所返回的IBinder对象应该是ADT所生成的的子类。第八章 内容提供者1、教学要求了解什么是内容提供者。学会使用内容提供者。学会使用ContentResolver操作其他应用的数据。学会使用内容观察者观察其他应用数据的变化。2、内容提供者Android中内容
30、提供者的作用为了实现这些功能,Android系统提供了一个跨应用进行数据访问的组件,这个组件就是内容提供者ContentProvider。定义一个类继承包下的ContentProvider类(抽象类)。子类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。ContentProvider是四大组件之一,必须要在清单文件中注册3、数据暴露的安全性问题当使用provider暴露敏感数据时,为了数据安全,在注册ContentProvider时,还可以为其设定一些列的权限,具体操作如下:利用android:permission属性,如果在注册provider时使用了该属性,则其他应用访问该ContentProvider时必须加上该权限,否则会报异常。如:PersonDBProvider注册了下述权限,android:permission=“则其他应用访问该Provider时需要加上user-permission android:name=“才可以。此外,还可以为Provider配置android:readpermission属性,如果在注册了provider时使用了该属性,那么其他应用在使用query方法查询数据时,必须加上该权限。android
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1