REST是一个被广泛采用的架构模式,尤其在API、Web Services、云计算流行的大环境下,所有主流的互联网厂商都提供了其服务的REST接口,用户可采用JSON、XML格式使用HTTP进行方法调用和数据传输。
RESTful已成为主流客户-服务器编程模式,在手机端与后端系统的交互中也被普遍采用。
现在我们就来分析下Android环境下的RESTful编程模式和一般方法。
错误的实现方式

这个做法会导致:
- 操作系统shutdown这个进程;
- 数据不能持久化保存。
而正确处理REST方法通常有三种设计模式:
- 使用 Service API
- 使用 ContentProvider API
- 使用 ContentProvider API 和 SyncAdapter

其中,Service Helper的作用是:
以单体(Singleton)的方式暴露一个简单的异步API给用户接口使用。
• 准备和发送服务请求
– 检测方法是否已经被挂起
– 创建请求意图
– 添加操作类型和一个唯一的请求id号
– 添加方法的特殊属性值
– 添加binder回调
– 调用startService(意图)
– 返回请求id号
• 处理从服务返回的回调
– 将回调分发给用户接口监听器
实战一下:
从An attempt at implementing a RESTful Android application 开始RESTful Android应用的尝试
git clone https://github.com/jeremyhaberman/restful-android.git
在 eclipse > file > import > Existing Projects into Workspace
Debug As Android Application,这里使用了Simple OAuth library for Java第三方库
如通过Twitter API使用OAuth验证
import com.jeremyhaberman.restfulandroid.rest.Request;
// RESTful Android Twitter app settings
private static final String TWITTER_API_KEY = “ssdfiwKoedslVjUsngtow”;
private static final String TWITTER_API_SECRET = “sdfsIkkmIKLFDvzaLdnBeLAVkwPFUxxZ9Ulf8fkY”;
private static final String TWITTER_CALLBACK_URL = “restful-android://callback”;
总结:
- 不要在Activities里实现REST方法;
- 从一个服务中启动长时间运行的操作;
- 持久要早、要经常(Persist early & persist often)
- 最大限度的减少网络使用(Minimize the network usage);
- 是不是在关键时刻使用同步适配器执行后台操作(Use a sync adapter to execute background operations which are not time critical),使用Android Cloud to Device Messaging。
参考:
首先下载 ArcGIS Runtime SDK for iOS ,需注册ArcGIS账号。
安装后的路径信息:
The ArcGIS Runtime SDK for iOS has successfully installed content into the following folders located in your profile (~/Library):
~/Library/SDKs/ArcGIS/ArcGIS.framework
~/Library/SDKs/ArcGIS/Samples
~/Library/Developer/Shared/Documentation/DocSets
~/Library/Application Support/AGSiOSSDK/
To uninstall the API and remove all content from your computer run uninstallAGSiOSSDK at:
~/Library/Application Support/AGSiOSSDK
打开Xcode,你会发现已有ArcGIS项目的向导。

或下载ArcGIS for iOS Developer Samples直接调试已有的iOS例子,加速你对这块知识的学习。

这是GPS功能演示,它能显示设备在地图上的位置。
最近在学习android的appwidget,看了一些文章,决定做一个相册幻灯片来练手,下面写写过程来给大家共享:
- 在项目的res/xml/下建立一个appwidget_info.xml文件,内容如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
android:initialLayout=”@layout/appwidget”
android:minHeight=”800dp”
android:minWidth=”240dp”
android:updatePeriodMillis=”300000″ >
</appwidget-provider>
在这里定义appwidget的基本信息,宽度,高度,以及刷新的频率等
- 在layout/下建立appwidget的layout文件
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:gravity=”center”
android:orientation=”vertical”
android:padding=”20dp” >
<Button
android:id=”@+id/button1″
android:layout_width=”120dp”
android:layout_height=”wrap_content”
android:layout_gravity=”center_horizontal”
android:text=”播放图片” />
<ImageView
android:id=”@+id/imageView1″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”#FFFF”
android:padding=”2dp”
android:scaleType=”fitXY”
android:src=”@drawable/p1″ />
</LinearLayout>
这个layout比较简单,里面仅仅包含一个button和一个imageview,设置 android:padding=”2dp”来让图片有一个简单的边框样式
- 建立MyAppWidgetProvider继承AppWidgetProvider,重写父类的生命周期函数,这里的原理google一下有很多,就不多写了。首先重写onUpdate,这个方法在appwidget第一次加载时会被调用,在这里我们主要使用ContentResolver查询出本机所有图片;接下来新建一个PendingIntent将图片路径的集合封装到其中,最后将pendingIntent设置给button
Intent intent =
new Intent(”com.jaredluo.appwidget.change”
);
intent.putExtra(“path”
, pathStrArr);for (int j = 0; j < appWidgetIds.length; j++由于appwidget与主程序处于不同的进程中,所以通讯都需要依靠PendingIntent。
) {
//RemoteView是appwidget中很重要的一个类,基本上对appwidget中
//所有控件的操作都要基于RemoteView来操作
RemoteViews remoteView = new RemoteViews(context.getPackageName(),
R.layout.appwidget);
remoteView.setOnClickPendingIntent(R.id.button1, pIntent);
appWidgetManager.updateAppWidget(appWidgetIds[j], remoteView);
remoteView = null;
}
//设置pending,发送广播,注意设置
//PendingIntent.FLAG_UPDATE_CURRENT
//否则onRecieve函数中接收不到intent中的数据
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0
, intent,PendingIntent.FLAG_UPDATE_CURRENT);
- 接下来在onReceive中接收我们刚才设置给button的广播,首先新开一个线程控制图片的播放,接下来在Handler中为ImageView设置图片源
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget);
String path = paths[msg.getData().getInt(”i”)];
remoteViews.setImageViewBitmap(R.id.imageView1,BitmapUtil.getBitmap(path, 200, 200));
appWidgetManager.updateAppWidget(componentName,remoteViews);
这里需要注意一个问题,我在把图片设置给appwidget时,跑不了几张图片就会出现!!! FAILED BINDER TRANSACTION !!!这个错误,最先以为是图片太大造成的,结果压缩图片也无果;后面在网上搜索一番发现:Binder data size limit is 512K 由于传输图片到appwidget进程中的Binder最大数据量是512k,并且RemoteView也不会每次清理,所以如果每次都使用同一个RemoteView进行传输会因为溢出而报错。最后每次都新建一个RemoteView问题才解决掉。
看看最后的效果,点击播放图片按钮,图片就开始更替:

代码还有很多问题和不完善,接下来有空会继续修改。
苹果iOS 5已正式发布,你需要将iTunes更新至10.5,然后通过iTunes更新你的iOS 5。
iOS 5 新增加了 200 多个新功能,其中包括:
• 通知
- 从任意屏幕的顶部向下推送,即可在“通知中心”集中查看所有通知。
- 新收到的通知会短时间显示在屏幕顶部
- 可从锁定的屏幕查看通知
- 将通知应用程序图标从锁定的屏幕的左侧滑到右侧,即可直接前往该应用程序
• iMessage
- 可与其他 5 位 iOS 5 用户收发不限量的文本信息、照片信息和视频信息。
- 可查阅送达回执和已读回执来跟踪信息的状态
- 群发信息和安全加密
- 可在蜂窝网络和无线局域网中使用*
- 报刊杂志
- 在“主屏幕”上自动整理订阅的报纸杂志
- 显示最新一期报纸杂志的封面
- 在后台下载新一期报纸杂志
• 用“提醒事项”来管理待办事项
- 与 iCloud、iCal 和 Outlook 同步
- 在您离开或到达某一个位置时发送基于位置的提醒(适用于 iPhone 4S 和 iPhone 4)
• 内建对 Twitter 的支持
- 只需在“设置”中登录一次,就可直接从“相机”、“照片”、“地图”、Safari 和 YouTube 发送推特信息
- 可将位置信息添加到任何推特信息中
- 在“通讯录”中显示 Twitter 个人资料中的图片和用户名
• 增强了配备相机的设备中的相机功能
- iPhone 4S、iPhone 4、iPhone 3GS 和 iPod touch(第四代)处于睡眠状态时,连按两次主屏幕按钮,即可快速调用相机
- 可使用调高音量的按钮来进行拍摄
- 拍照时可选用网格线来提供坐标参考
- 在预览屏幕上捏合或张开手指可缩放图像
- 可推送预览屏幕来查看相机胶卷中的照片
- 轻按一下并按住可锁定聚焦和曝光,iPad 2 和 iPod touch(第四代)仅支持锁定曝光
• 增强了配备相机的设备中的照片功能
- 裁减与旋转
- 移除照片红眼
- 轻按一下即可改善照片
- 将照片整理成相簿
• 增强了 Mail 功能
- 可将邮件的文本格式设置为粗体或斜体,或者给文本添加下划线
- 可控制缩进级别
- 可拖移地址栏中的名字以重新排列
- 将邮件标记为有旗标
- 同时将大量邮件标记为旗标、已读或未读
- 自定邮件的提醒声音
- S/MIME(安全多用途网际邮件扩充协议)
- 改进了日历功能
- iPad 上的年视图,和 iPhone 与 iPod touch 上新的周视图
- 轻按一下即可创建事件
- 查看与添加事件附件
• 增强了 Game Center 功能
- 可将您的个人照片用于您的 Game Center 帐户
- 对比您与朋友的总体成就得分
- 通过交友推荐和朋友的朋友在 Game Center 结交新朋友
- 通过自定的游戏推荐来发现新游戏
• iPad 2 和 iPhone 4S 上新增“AirPlay 镜像”功能
• 适用于 iPad 的多任务手势
- 四指或五指捏合来前往“主屏幕”
- 向上推送来显示多任务栏
- 左右推送来切换应用程序
• 使用“设置助理”直接在设备上进行设置、激活和配置
• 无需连线电脑共享网络,即可以无线方式更新软件
• 支持 iCloud
- iTunes 云服务
- 照片流
- 文档云服务
- 可自动下载应用程序和图书,并保留购买历史记录
- 备份
- 通讯录、日历和邮件
- 查找我的 iPhone
• 重新设计了 iPad 上的“音乐”应用程序
• 每小时天气预报
• 实时股票报价
• 无线同步到 iTunes
• 改善了键盘功能
- 可拆分 iPad 键盘
- 提高了自动改正的准确性
- 改进了中文和日文的输入法
- 新的表情符号键盘
- 新增用户词典,可用于自动改正
- 可选择为常用字词创建可扩展的键盘输入码
• 增强了辅助功能
- 在 iPhone 4S 和 iPhone 4 上,可选择在接收来电或收到提醒时闪烁 LED
- 可在 iPhone 上自定来电的振动模式
- 增加了新的界面,方便有行动障碍的用户通过专用的输入设备来使用 iOS
- 可朗读选定的文本内容
- 自定 VoiceOver 的元素标签
• 增强了 Exchange ActiveSync
- 无线同步任务
- 将邮件标记为有旗标、已读或未读
- 加强了离线支持
- 存储来自 GAL 服务的新联系人信息
• 新增 1,500 多个开发人员 API
• 错误修复
与本软件更新兼容的产品:
• iPhone 4S
• iPhone 4
• iPhone 3GS
• iPad 2
• iPad
• iPod touch(第四代)
• iPod touch(第三代)
* 可能要缴纳正常的运营商数据收费。iMessage 不可用时,信息将以 SMS 短信方式发送,可能要缴纳运营商信息收费。
若要进一步了解本更新的安全性内容,请访问此网站。
这里整理了微软亚洲研究院搜索引擎相关的博文,很有学术和研究价值。

机器学习正在改变我们的工作与生活 2011-07-27
社交网搜索成为网络搜索学界最炙手可热的话题 2011-05-26
下一代互联网搜索的前沿:意图、知识与云 2011-05-05
微软“旅游指南”重装上阵 2010-10-12
察“颜”观“色”的秘诀 2010-08-24
勾画世界,勾画未来–MindFinder基于轮廓的图像搜索 2010-08-10
让PC读懂你的图 2010-05-13
游求必应的Travel Guide旅游指南(二) 2009-11-26
微软决策搜索 2009-11-19
游求必应的Travel Guide旅游指南(一) 2009-09-21
探寻天空之美 2009-09-15
快乐搜索从首页图片开始 2009-07-13
微软“必应地图”大更新 2009-06-02
H1N1流感分布图实时发布 2009-05-14
Live Search赈灾地图:为四川重建尽一份力 2009-05-11
微软人立方大揭密——“六度搜索”界面设计的来龙去脉 2009-03-26
人立方大揭秘——穿越时间的秘密 2009-03-24
春节祝福 2009-01-22
岁末献礼,微软搜索特色功能大盘点 2009-01-20
微软搜索的春节之道 2009-01-12
图片搜索新功能,微软的秘密武器 2008-12-18
微软人立方:时间轴上的关系搜索 2008-12-11
微软人立方:六度连连看 2008-12-09
找到属于自己的关键词 2008-10-31
搜索、广告与长尾 2008-05-27
微软地图搜索的援震行动 2008-05-13
学会排序 2008-01-31
绘制关系矩阵 2008-01-10
搜索的庖丁之刃(下) 2008-01-01
搜索的庖丁之刃(上) 2007-12-27
跳出盒子的想象与机器学习 2007-11-07
新闻搜索的脉络 2007-10-18
图片搜索的收纳柜 2007-09-20
SIGIR大会的新关键词 2007-09-11
能识图的搜索 2007-08-01
邂逅垃圾网页“清道夫” 2007-06-26
搜索视频的”内心” 2007-06-05
所搜即所得 2007-05-23
研究员的回复——答网友对”照片搜索”技术的提问 2007-05-17
神奇的照片搜索 2007-05-15
相关信息:
李航博士的博客
ACM网络搜索与数据挖掘国际会议, ACM Conference on Web Search and Data Mining, 简称WSDM
迅雷推迟IPO,迅雷CEO邹胜龙在给全体员工的邮件中提到,由于美国投资者对中国上市公司心存疑虑,长线基金看低中国价值,迅雷暂缓上市,如果环境改善,可随时重启IPO。详情>>>