Android总复习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A n d r o i d总复习(总27页)
--本页仅作为文档封面,使用时请直接删除即可--
--内页可以根据需求调整合适字体及大小--
第三章Activity初步
Activity是Android中最核心的应用程序组件,也是大多数程序必须使用的用于显示界面的组件。
因此,更好地掌握Activity的使用方法对更深入学习Android至关重要。
创建Activity
建立一个普通的Java类,该类需从Activity类或者子类中继承。
覆盖Activity类的onCreate方法。
该方法中需显示调用(servdInstanceState)
在onCreate方法中使用setContentView装载View
配置Activity
创建好的Activity不能马上使用,还需要在文件中配置。
每一个Activity都会对应文件中的一个<activity>标签。
在该标签中的常用属性包括:
android:name是一个必选属性,用于指定一个Activity的类名。
android:label指定一个字符串或资源ID,用于设置应用程序列表中程序图标下方的文字
android:icon用于设置应用程序的图标
<activity>标签中包含的<intent-filter>标签用于对Activity进行分类,其中:
<action>标签表示Activity可接收的动作一个必选属性,用于指定一个Activity的类名。
<cagegory>标签标识Activity所属的种类
当Android系统运行程序时,会首先启动包含动作的Activity。
作为Main Activity,必须要使用作为其类别,表示该Activity可以显示在最顶层。
Intent对象中包含了一组信息
Component name, Action, Data,Category,Extras,Flags
Intent对象的使用方法
Intent intent=new Intent();
,;
使用Intent对象在Activity之间传递数据
在Activity1中添加需传递给Activity2的键值对
Intent intent=new Intent();
(“testIntent”,”abc”);
,;
在Activity2中获取所需键对应的值
Intent intent=getIntent();
String value=(“testIntent”);
通过Intent对象启动的组件可不在同一个应用程序中。
例如,可使用Intent启动发送短消息界面
chema命令
可查看当前数据库的表
SQLiteDatabase类
作为SQLite的数据库实体类,用来管理数据库增删改查等操作,具体方法包括insert(),delete() ,update() ,query()等方法
ListView数据绑定
SQLite数据库中的数据:
自定义Adapter LayoutInflater ViewHolder
第八章广播机制
广播是Android SDK四大组件中唯一需要被动接收数据的组件,负责接收Broadcast数据的接收器永远不知道什么时候可以接收到广播。
广播机制最大的用途是接收系统发出的消息。
例如,当收到短信时,可以截获发送短信的电话号码和短信内容;当来电话时,可以截获来电的各种状态(响铃、接听、挂断);可以获取系统电源的状态变化、手机信号的强弱状态等等。
全局事件——广播
当Android系统中发生某些事件时(收到短信、来电等)就会向整个Android 系统发出消息,这种消息被称为广播,与之对应的接收方称为广播接收器。
广播机制最大的特点是:发送方并不关心接收方是否能够接收到数据,也不关心接收方如何处理数据。
广播机制应用——电池监控
定义电量小于50%时,弹出通知栏消息
通知栏信息——Notification
通知一般通过NotificationManager服务发送一个Notification对象来完成。
NotificationManager是一个重要的系统级服务,该对象位于应用程序的框架层中,应用程序可以通过它向系统发送全局的通知。
NotificationManager 类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。
而Notification中,并不使用常规的Intent去传递一个意图,而是使用PendingIntent。
PendingIntent可以看做是对Intent的包装,用于处理即将发生的意图,而Intent用来用来处理马上发生的意图。
对于通知来说,它是系统级的全局通知,并不确定这个意图被执行的时间。
当在应用外部执行PendingIntent时,因为它保存了触发应用的Context,使得外部应用可以如在当前应用中一样,执行PendingIntent里的Intent,就算执行的时候响应通知的应用已经被销毁了,也可以通过存在PendingIntent里的Context照常执行它,并且还可以处理Intent带来的额外信息。
PendingIntent提供了多个静态的getXxx()方法,用于获得适用于不同场景的PendingIntent对象。
一般需要传递一个flag参数,用于标识PendingIntent 的构造选择:
FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。
FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用。
当获得了指定属性的Notification对象之后,就可以使用()方法发送通知。
在使用()发送通知的时候,需要传递一个标识符,用于唯一标识这个通知。
也可以使用cancel(int)来移除一个指定的通知。
第九章Service服务组件
Service是Android系统中的四大组件之一。
Service与Acitivity不同在于,它没有可视化界面,不能与用户直接交互,是一种长生命周期、运行于后台的服务程序。
例如,从Internet下载文件、播放音乐等操作耗时较长,但不需要占用应用程序的线程,而是单开线程在后台执行,都需要通过Service方式执行。
Service的生命周期
Service与Activity一样,也有着从启动到销毁的过程。
Service从启动到销毁的过程会经历3个阶段:
创建服务:public void onCreate();
启动服务:public int onStartCommand(Intent intent, int flags, int startId)
销毁服务:public void onDestory();
一个服务只会创建一次,销毁一次,但可以开始多次,因此,onCreate和onDestory方法只会被调用一次,而onStartCommand()方法会被调用多次。
、
Service的启动方式
Service有两种启动方式:()和()。
通过(Intent intent)方式
启动时:startService onCreate()onStart()
停止时:stopService onDestroy()
如果调用者(Activity)直接退出而没有停止Service,则Service会一直在后台运行。
用此方法启动服务,在Service未被创建时,系统先调用Service 的onCreate()方法,接着调用onStartCommond()方法,如果调用
startService方法前服务已被创建,多次调用startService不会多次创建服务,只会多次调用onStartCommond方法
onStartCommand方法的返回值
START_STICKY:当服务在运行时被杀死,系统将会把它设置为started状态,但是并不保存期传递的Intent对象。
START_NOT_STICKY:当服务在运行时被杀死,并且没有新的Intent对象传递过来,系统将会把它设置为started状态,但并不会再次创建进程,直到startService(Intent)。
方法被调用
START_REDELIVER_INTENT:当服务在运行时被杀死,它会间隔一段时间后重新被创建,并且最后一个传递的Intent对象将会再次传递过来。
通过(Intent intent, ServiceConnection conn, int flags)方式
(1)绑定时:bindService onCreate()onBind()
绑定Service需要3个参数:
①intent:intent对象,需要定义指向服务类
②conn:ServiceConnection接口对象,创建该对象要实现它的onService Connected()和onServiceDisconnected()来判断连接成功或是断开连接onServiceConnected(ComponentName name, IBinder service):系统调用该方法来传递由service的onBind()方法返回的Ibinder onServcieDisconnected(ComponentName name):对service的连接意外丢失,比如service崩溃或被杀死时,系统会调用该方法
③flags:创建Service的模式
:指定绑定的时候自动创建Service,是最常使用的模式
:测试绑定的时候,进行调试所用
:不在前台进行绑定。
(2)解绑时:unbindService onUnbind ()onDesTroy()
此时如果调用者(如Activity)直接退出,Service由于与调用者绑定在一起,则Service会随着调用者一同停止。
用()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。
这时,调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。
如果调用bindService()方法前服务已经被绑定,多次调用()方法并不会导致多次创建服务绑定(也就是说onCreate()和onBind()方法不会被多次调用。
)如果调用者系统与正在绑定的服务解除绑定,可以调用()方法,这将导致系统调用服务的onUnbind()onDestroy方法
应用案例
相关技术说明
单例模式是一种常用的软件设计模式。
在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
Application简介
Application和Activity,Service一样,是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息。
通常不需要指定一个Application,系统会自动帮我们创建,如果需要创建自己的Application,只需要创建一个类继承 Application并在manifest 的application标签中进行注册(只需要给Application标签增加个name属性把自己的 Application的名字定入即可)。
Application也使用了单例模式,但在Application中保存了Context上下文变量,而普通的单例模式是无法获得Context对象的。
本案例中的MyApplication类中包含对单例的获取方法、播放器的初始化方法、播放方法的获取与设置方法。
在Manifest文件中注册MyApplication
MyApplication类
播放器初始化——initPlayer()
MyService部分的处理
第十章网络访问
Android与服务器通信的方式一般有两种方式:HTTP通信方式、SOCKET通信方式。
此外,Android还提供了一个可以浏览Web页的控件:WebView。
WebView控件可以在自己的应用程序中显示本地或Internet上的网页。
WebView是一个使用WebKit引擎的浏览器控件,因此,可以将WebView当成一
个完整的浏览器使用。
WebView不仅支持HTML、CSS等静态元素,还支持JavaScript中还可以调用Java的方法。
浏览网页是WebView控件最基本的功能,通过方法可直接装载任何有效的网址,例如,要显示页面的内容
WebView控件不仅可以浏览Internet上的网页,也可以浏览本地的网页文件或任何WebView支持的文件:
WebView控件浏览网页
如果需要监视加载进度的,需要创建一个自己的WebChromeClient类,并重载方法onProgressChanged
(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
"Loading...");
if (progress >= 80) {
"JsAndroid Test");
}
}
});
在Android的应用程序中,可以直接调用WebView中的JavaScript代码,而WebView中的JavaScript代码,也可以去调用Android应用程序(也就是JAVA 部分的代码)。
在WebView网页加载初始化和完成事件
(2) Android程序中调用JAVASCRIPT脚本
HTTP通信
HTTP工作在TCP/IP协议体系中的TCP协议上。
它可以通过传输层的TCP协议在客户端和服务器之间进行数据传输以及数据之间的交互,格式如: line)、请求头部(header)、空行和请求数据4个部分组成。
请求行请求行由请求方法字段、URL字段和HTTP协议版本字段3个部分组成,并用空格分隔。
例如:
GET / HTTP/
HTTP协议的请求方式有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
请求头部请求头部由关键字/值对组成,每行一对,关键字和纸用英文冒号“:”分隔,用于通知服务器有关客户端请求的信息,比如浏览器类型,客户端可识别的内容类型列表等。
空行最后一个请求头之后是一个空行,发送回车符和换行,通知服务器以下不再有请求头。
请求数据请求数据在POST方法中使用。
适用于需要客户填写表单的场合。
与请求数据相关的最常用的请求头包括:Content-Type和Content-length。
一个HTTP响应报文由三部分组成:状态头、消息报文、响应正文。
其中状态行中,通过状态码来标识客户端请求和服务器响应的状态
Android应用程序经常需要与服务器端交互,这就需要手机客户端发送网络请求,常用的网络请求方式包括:
包中的HttpURLConnection类
(1)Get方式请求
(2)Post方式请求
包中的HttpGet和HttpPost类
(1)HttpGet方式请求
(2)HttpPost方式请求
HTTP通信实例——文件下载与保存
HTTPClient
它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET和HTTP POST调用。
HttpClient的使用步骤:
使用DefaultHttpClient类实例化HttpClient对象
创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost 对象
调用execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象
通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理
Socket通信
套接字(Socket)是通信的基石,是支持TCP/IP的网络通信的基本操作单元。
它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址和远程进程的协议端口。
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。
套接字之间的连接过程分为三个步骤:服务器监听、客户端请求、连接确认。
Socket通信实例1——端口扫描
TCP通信
Socket通信实例2
第十一章应用程序的签名
应用程序签名
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。
这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
为了方便我们开发调试程序,ADT会自动的使用debug密钥为应用程序签名。
debug密钥是一个名为的文件,它的位置:
这也就意味着,如果想拥有自己的签名,而不是让ADT帮我们签名的话,需要有一个属于自己的密钥文件(*.keystore)
应用程序签名步骤
apk的签名工作可以通过两种方式来完成:
通过ADT提供的图形化界面完成apk签名;
完全通过DOS命令来完成apk签名:
下面将讲解如何通过命令的方式完成apk签名。
给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool、jarsigner和zipalign
keytool:生成数字证书,即密钥
jarsigner:使用数字证书给apk文件签名
zipalign:对签名后的apk进行优化,提高与Android系统交互的效率
这3个工具默认所在的路径:
keytool:该工具位于jdk安装路径的bin目录下;
jarsigner:该工具位于jdk安装路径的bin目录下;
zipalign:该工具位于android-sdk-windows/tools/目录下
生成未经签名的apk文件
打开Eclipse,在Android项目名称上点击右键,依次选择“Android Tools”- “Export Unsigned Application Package ...”,然后选择一个存储位置保存即可
使用keytool工具生成数字证书
keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
-keystore 表示生成的数字证书的文件名为“”;
-alias 表示证书的别名为“”,当然可以不和上面的文件名一样;
-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效
使用jarsigner工具为Android应用程序签名
jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;
-keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;
-signedjar 表示给文件签名,签名后的文件名称为;
最后面的表示证书的别名,对应于生成数字证书时-alias参数后面的名称
使用zipalign工具优化已签名的apk
zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;
表示对已签名文件进行优化,优化后的文件名为;。