第三篇 功能实现(3)

●发一个广播和启动一个隐式的Intent非常像,那么它们之间有什么区别呢?

Implicit Intents (sent via startActivity( )) and Broadcasts (sent via sendBroadcast( )) have the following differences:

Broadcasts, by default, can affect multiple applications at once (Ordered Broadcasts have the potential to be disrupted). In contrast, Implicit Intents will only affect one application. Please note that there may be multiple possibilities of applications that could be affected, but eventually only one will be.

Implicit Intents are handled via Intent-Filters, and Broadcasts are handled via Broadcast Receivers (albeit the intent-filters play a role here too). I have seen in many instances over the web that Broadcasts are compared to Intent-filters and that does not make sense to me.

An Implicit Intent launches an Activity, or a Activity. By contrast, a Broadcast launches a Broadcast Receiver. (This, if you think about it, is the core difference between Intents and Broadcasts. It is because of this reason that Broadcasts aren't meant to do too much heavy work, and especially not UI work!)

 

Implicit Intents(通过startActivity( )发送)和Broadcasts(通过sendBroadcast( ))有如下区别:

默认情况下,Broadcasts能够一次性影响多个App应用(有序广播能够被中断)。相对比之下,Implicit Intents只能影响一个App应用。注意,有很多潜在的App应用会受影响,但最终受影响的只会有一个。

Implicit Intents 被Intent-Filters处理,而Broadcasts被 Broadcast Receivers处理(尽管intent-filters 在这儿也起作用)。

一个Implicit Intent启动一个Activity。相对比之下,一个Broadcast启动一个Broadcast Receiver(因为这个原因,Broadcasts不能处理太重的工作,尤其是UI工作)。

 

●Context

Context其实就是句柄,只不过不像Windows一样,每个资源都可以是一个句柄,Android的一个句柄包含了很多全局信息,比如说Activity就是一个句柄。

 

官方说明:

1)Interface to global information about an application environment. 它描述的是一个应用程序环境的信息,即上下文。

2)This is an abstract class whose implementation is provided by the Android system. 该类是一个抽象类(abstract class),Android提供了该抽象类的具体实现类。

3)It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. 通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等。

 

Context的作用:

Context是一个抽象基类,我们通过它访问当前包的资源(getResources、getAssets)和启动其他组件(Activity、Service、Broadcast)以及得到各种服务(getSystemService),当然,通过Context能得到的不仅仅只有上述这些内容。Context提供了一个应用的运行环境,在Context的大环境里,应用才可以访问资源,才能完成和其他组件、服务的交互。

 

Context的类型:

Context的类型有两种,一种是Activity Context,它随着Activity的销毁而销毁; 另一种是Application Context,它伴随着整个Application。

指针(指针变量)是一个存储内存地址的变量。

而句柄是Windows在内存中维护的一个对象的内存物理地址列表的整数索引, 故可以认为句柄是指向指针的指针, 它最终指向的对象可以是一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。

比喻:

你(小华)由于犯法被关进局子,和你一起的还有其他很多人,监狱长为了方便,给每个犯人一个标号,比如你是0001,那么以后监狱长碰到0001就知道是你了,这个编号就是句柄,而你就是0001所代表的资源.

 

 

 

 

 

第9章 Android中的数据存储

●Content Provider

ContentProvider数据共享的操作

如果把ContentProvider可以比作是一个Android系统内部的网站服务器,该网站服务器的内容源于SQLite、Files、Internet等方面

那么这个网站服务器以固定的Uri对外提供服务

而ContentResolver则可以当成Android系统内部的HttpClient

它可以向指定Uri发送"请求",通过这种方式把"请求"委托给ContentProvide进行处理,从而实现了"网站服务器"的操作,如下图所示:

* Remote指远程服务器

 

业务层(Apps)→ 数据获取层(Content Provider内容提供者)→数据层(Internet, SQLite, Files)

 

 

  • ashmem是android的内存分配/共享机制

Blinder应该是Binder

 

 

 

● ContentProvider, ContentResolver, ContentObserver

 

●Content Provider类需重写的方法

Here is the list of methods which you need to override in Content Provider class to have your Content Provider working:

onCreate() This method is called when the provider is started.

query() This method receives a request from a client. The result is returned as a Cursor object.

insert()This method inserts a new record into the content provider.

delete() This method deletes an existing record from the content provider.

update() This method updates an existing record from the content provider.

getType() This method returns the MIME type of the data at the given URI.

 

 

●用FileExplorer查看Android手机中的数据库

1.window->show view->other

2. 输入 file 查找

   

3. 出来了吧

<?xml version="1.0" encoding="utf-8"?>中可以用双引号也可以用单引号.

 

●readLine()

readLine()是读入一行,如果读到的是null值的话就结束了。

在你用in.readLine来读取数据的时候,一般都需要一个while循环来判断是否已经读取完毕。

String str="";

while((str = in.readLine())!=null){

…………

}

直接回车的话读进来就是一个回车,\r\n

 

●URI & URL

URL是整个链接

URI 是从虚拟根路径开始的

例如:

URL http://zhidao.baidu.com/question/68016373.html

URI 是/question/68016373.html

在百度服务器上http://zhidao.baidu.com/被设置成了虚拟路径的根

URL:Uniform Resource Locator,统一资源定位符;

URI :Uniform Resource Identifier,统一资源标识符;

URN:Uniform Resource Name,统一资源名称(URN)是统一资源标识(URI)的历史名字。

 

●Get the URL

 

 

 

 

 

 

 

 

 

第10章 绚丽的多媒体技术

 

 

 

 

 

 

 

 

 

 

 

第11章 Android网上冲浪

●JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式(a lightweight data-interchange format)。

JSON被公认为浏览器中XML的后继者,它的目标仅仅是成为一种简单、优雅的数据格式,以方便浏览器和服务器之间的数据交换。在完成这一简单任务的过程中,它将引领下一代万维网。

它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

 

●图示1

 

●图示2

 

●GET 和 POST。

HTTP 定义了与服务器交互的不同方法,最常用的有4种,Get、Post、Delete,、Put如果我换一下顺序就好记了,Put(增),Delete(删),Post(改),Get(查),即增删改查,下面简单叙述一下:

 

1)Get, 它用于获取信息,注意,它只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,而稍后会提到的Post它是可以修改数据的,所以这也是两者差别之一了。

2) Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。

 

3)Delete 删除数据。可以通过Get/Post来实现。用的不多,暂不多写,以后扩充。

 

4)Put,增加、放置数据,可以通过Get/Post来实现。用的不多,暂不多写,以后扩充。

 

下面简述一下Get和Post区别:

 

1) GET请求的数据是放在HTTP包头(即URL之后)中的,通常是像下面这样定义格式的,(而Post是把提交的数据放在HTTP正文中的)。

例如:

https://www.baidu.com/s?wd=语言学&tn=87048150_dg&ie=utf8

a. 以 ? 来分隔URL和数据;

b. 以 & 来分隔参数;

c. 如果数据是英文或数字,原样发送;

d. 如果数据是中文或其它字符,则进行BASE64编码。

 

※ 登录网站必然使用POST方法, 如成功登陆知乎后, 地址栏只显示:

https://www.zhihu.com/#signin

 

2)GET提交的数据比较少,最多1024B,因为GET数据是附在URL之后的,而URL则会受到不同环境的限制的,比如说IE对其限制为2K+35,而POST可以传送更多的数据(理论上是没有限制的,但一般也会受不同的环境,如浏览器、操作系统、服务器处理能力等限制,IIS4可支持80KB,IIS5可支持100KB)。

 

3)Post的安全性要比Get高,因为Get时,参数数据是明文传输的,而且使用GET的话,还可能造成Cross-site request forgery攻击。而POST数据则可以加密的,但GET的速度可能会快些。

操作方式

数据位置

明文密文

数据安全

长度限制

主要应用场景

GET

HTTP包头

明文

不安全

长度较小

查询、获取数据

POST

HTTP正文

可明可密

安全

支持较大数据传输

提交、修改数据

下面的表格列出了其它的一些 HTTP 请求方法:

 

方法

描述

HEAD 

GET 相同,但只返回 HTTP 报头,不返回文档主体。

PUT 

上传指定的 URI 表示。

DELETE 

删除指定资源。

OPTIONS 

返回服务器支持的 HTTP 方法。

CONNECT 

把请求连接转换到透明的 TCP/IP 通道。

 

 

●Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<uses-permission android:name="android.permission.INTERNET"/>

 

 

●http的状态码(httpstatus)

100-199 用于指定客户端应相应的某些动作。

200-299 用于表示请求成功。

300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

400-499 用于指出客户端的错误。

500-599 用于支持服务器错误。

例如:

1、200 (sc_ok/正常)——的意思服务器成功处理了请求。一般用于相应GET和POST请求。这个状态码对servlet是缺省的;如果没有调用setStatus方法的话,就会得到200。

※ httpstatus.sc_ok被定义成一个常量并被赋值为200

200、201 (sc_reated/已创建)——表示服务器在请求的响应中建立了新文档;应在定位头信息中给出它的URL。

3、301/302——

301 redirect: 301 代表URL永久性转移(Permanently Moved)。

302 redirect: 302 代表URL暂时性转移(Temporarily Moved )。

"转移"指"浏览器中旧的URL变成了新的URL,页面跳到了这个新的URL指向的地方。

4、304——Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存

5、404 Not Found 未找到资源

6、501——Internal Server Error服务器遇到一个错误,使其无法对请求提供服务

 

●根据URL获取图片

http://jingyan.baidu.com/article/eb9f7b6daa31c5869364e816.html

 

●HttpClient和socket的关系

socket是Java底层的通信方式,使用的协议是TCP/IP.

HttpClient是模拟(或者说使用)我们日常使用的Http协议.

而TCP/IP协议是Http协议的底层实现.

也就是说Http协议要转换成TCP/IP协议.

从Java的角度来说,就是HttpClient间接的使用了socket来通信.

这部分知识经常和异步处理联系在一起.

 

我们可以用HttpClient获取并解析JSON数据, 详见:

http://www.open-open.com/lib/view/open1377956762049.html

也可以用更底层的Socket获取并解析JSON数据, 详见:

http://www.2cto.com/kf/201504/395375.html

 

HTTP连接需要指明资源的URL

TCP连接实现时需要指明IP地址和端口号,就可以跟目的主机通过三次握手建立联系,该连接一直保持直到某一方提出取消连接,通过四次握手关闭连接。Socket支持TCP/UDP协议,如果使用TCP协议,那么socket连接就是TCP连接。

 

●★手机客户端应用网络通信是用socket还是http好?

1.如果通信频繁&&每次数据量不大的话,使用socket

2.如果一次通信数据量大,使用json,soap,xml之类的话就使用http的吧,json等可以大规模的包装数据

 

TCP的应用场景是手机与云端的服务器建立联系,因为要保持连接并指定连接的建立时间,所以在这种场景下使用TCP连接最合适。3G网络不支持端到端建立TCP连接,因为它是client-server模式,所以需要通过云端服务器的辅助来实现手机的端到端通信

 

WebService到底是什么?

一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

 

Web Service也叫XML Web Service WebService, 它支持3种协议来与用户交流数据:

1.HTTP-GET

2.HTTP-POST

3.SOAP(SOAP-Simple Object Access Protocol(简单对象访问协议))

 

SOAP是一种轻量的、简单的、基于 XML 的协议;是数据交换的一种协议规范;使用在计算机网络Web服务(web service)中。

 

※ SOAP 用XML"信息集合"作为它的"消息格式"。但是,XML的"信息集合"不一定是通过XML序列化,也可以通过CSV (Comma-Separated Values,CSV,逗号分隔值)或JASON。

 

SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

 

 

 

 

 

Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。

 

所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

 

所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。

 

1、WebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用.

 

2、我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,只是简单调用了一下服务器上的一段代码而已。

 

3、学习WebService可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样。

 

●socket网络编程使用的语言

C/C++, Java等

甚至可以用PHP, 不过确实不适合. 网页聊天应该没什么太大问题的..单进程 撑个千把人肯定没问题. 不过php因为是阻塞式的. 而且只能单线程去处理. 所以当有类似 有N个人同时向另外几千人同时广播消息时,延迟可能会非常大.单纯单用户对单用户的聊天应问题不大的

 

 

第12章 Android地图服务(略)

 posted on 2018-01-30 10:28  Arroz  阅读(289)  评论(0编辑  收藏  举报