2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

MDC Android 专场:账户同步备份框架与 Web&Native 混合开发

  • 2012-09-01
  • 本文字数:2338 字

    阅读完需:约 8 分钟

8 月 25-26 日,首届 MDC移动开发者大会在京召开,此次大会吸引了来自 iOS、Android 以及 Windows Phone 领域的开发和实践者参与,在 Android 分论坛上,点心架构师梁泉、盛大乐众 ROM 架构师郭振、58 同城客户端项目负责人张炎、点心架构师唐才林、豌豆荚百宝袋项目技术负责人高雄以及优酷高级开发工程师严佳分别到场做了主题演讲。本文结合活动实况及嘉宾演讲幻灯片对本次活动进行总结,希望能够让读者对本次活动以及移动开发有更全面的了解。

演讲一:郭振,Android 账户同步备份机制(点击下载演讲资料

设计账号同步备份软件的目的在于不希望重复输入,从而有效降低终端用户的使用成本。在设计盛大的产品时,主要考虑到了以下几点功能需求:

  • 设计盛大服务统一入口:盛大账户,共享登陆成果
  • 将通讯录和日历信息同步到服务器上
  • 将通话记录,短信,系统设置等信息备份到存储卡

稍后郭振介绍了 PIM 同步设计:同步服务器、协议以及客户端等数据。由此引申出了同步管理框架:

  • 处理基于账户的信息同步
  • 只负责调度控制各同步流程,具体协议,服务,操作各 App 自行开发
  • Gmail 的通讯录,Calendar 同步,FaceBook 自动更新

基于账户管理和 PIM 信息同步服务,Framework 提供了 Sync 框架,Sync 框架的主要结构如下:

图 1.1 Sync 框架结构图

如上图所示,通过一个队列管理各种应用发起的同步操作,通过 AlarmManager 控制队列中的各同步操作何时进行,通过 SyncStorageEngine 记录同步时连接服务器所需的认证信息,并且记录同步的状态,由于各应用同步操作的实现是不同的,因此具体 Sync 需要 App 自行实现。

接下来郭振还分享了 Google 数据备份的设计:

图 2.1 Google 数据备份设计

在备份过程中(应用程序可发起请求),Android 的备份管理器(BackupManager)将查找应用程序中需备份的数据,并把数据交给备份传输器,传输器再把数据传送给云存储。在恢复时,备份管理器从备份传输器取回备份数据并将其返回给应用程序,然后应用程序就能把数据恢复到设备上。

应用程序也能够发起恢复请求,但不是必须的——如果程序安装完毕且存在用户相关的备份数据,Android 会自动执行恢复操作。恢复备份数据主要发生于以下场合:用户重置设备或者升级到新设备后,以前装过的应用程序又被再次安装。

备份传输器是 Android 备份框架的客户端组件,它可由设备制造商和提供商定制。备份传输器可以因设备不同而不同,对于应用程序而言它是透明的。备份管理器的 API 将应用程序和实际备份传输器联接起来——程序通过一组固定的 API 与备份管理器进行通讯,而不必关心底层的传输过程。

为了备份应用程序数据,需要实现一个备份代理。此备份代理将被备份管理器调用,用于提供所需备份的数据。当程序重装时,还要调用此代理来恢复数据。备份管理器处理所有与云存储之间的数据传输工作(利用备份传输器),备份代理则负责所有对设备上数据的处理。

演讲二:张炎,大话 Web&Native 混合开发(点击下载演讲资料

张炎的分享主要分为 3 个部分:Web 或 Native 的选型,Hybrid 技术实现以及 Hybrid 经验分享。首先对比了 Web 和 Native 型应用的适用场景:

Web App:

  • 运行于设备浏览器上,故可实现到处运行
  • 无标准的 SDK,可根据需要任意选择
  • 通过前端技术开发,如 HTML、CSS、JavaScript 以及 PHP、Python 等后端开发语言

Native App:

  • 针对某一特定系统,有标准的 SDK,做跨平台移植较困难
  • 主要利用 HttpClient、Socket 等与服务端通信
  • 利用系统底层支持和框架层提供对应用层的支持

基于以上的对比,Native App 具有较强的动画处理能力,运行速度快,迭代成本高,较强的调用本地功能等特点;对于 Web App 来说,则具备移植性强,入门快,开发周期短,数据同步能力强等特点。

为了解决交互复杂、迭代频繁以及数据更新快等问题,混合式应用(Hybrid App)应运而生。通过 addJavascriptInterface(将一个 Java 对象绑定到一个 JavaScript 对象中)方法可实现 Web 对 Native 的调用,Native 对 Web 侧的调用则通过 loadUrl 方法实现。在最后,针对开发中一些问题,张炎分享了自己的经验:

  • 取消 Webview 长按出现文字复制框
    • 重写 Webview 的 performLongClick(),让其方法体为空;
  • Android 系统如何加载图片
    • 将默认占位符图片放在内容中,只加载一个;
    • 将图片的 URL 保存在自定义属性中,js 执行加载首屏图片;
    • 滑动页面时遍历所有图片是否在可视区域,加载显示可视区域图片;
    • 页面加载完后等待一段时间,达到异步;
  • 如何处理加载失败
    • PageStart 记录 url,每次 load 比较参数 url 和记录的 url,一致即为错误,将 webview 隐藏;
    • receive error 时调用 webview.clearView;
    • 重试加载时,在 loadResource 中让 webview 显示;
  • 如何处理加载超时
    • Webview 本身没有提供处理超时的方法,但是可以利用计算时间来处理超时;
    • Webview.postDelayed(new Runnable(),long);
    • mHandler.sendMessageDelayed(message,long)
  • 如何从 web 端获取 cookie 或 header
    • 混合模式下开发客户端,web 需要获取 native 设备的信息,以备后端统计监控使用。Android2.2 以上支持传递 header, 但是 ajax 内部请求不能获取 header,所以采用 cookie 方式。
  • 何时消失 loading 框
    • Webviewchromeclient.onProgressChanged;
    • 页面 onDomReady 后通知 native 关闭加载框

会后一些网友在新浪微博分享了他们参会的感受:

BBJamer :今天下午的安卓专场来个 150 多人。大家对黑莓可以转化安卓的应用都很感兴趣。结实了北京的两个重要的 Android 社区的负责人。再次感谢活动的组织方和大家的支持,预祝下周末的上海分场活动成功。

杨小龙 _ 北京:同步到云端安全问题感觉很堪忧,对内部开发人员相当与完全暴露 _。_

本次移动开发者大会北京站活动圆满结束,9 月 1 日至 2 日,上海站活动也已经展开,欢迎了解详细议程 @InfoQ 还将继续关注并报道相关新闻。

2012-09-01 03:272381
用户头像

发布了 156 篇内容, 共 57.9 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

【无偿分享】史上最全Python学习大礼包

sum56

Python 学习 学习方法 python 爬虫 资料整理

深度集成 Flink: Apache Iceberg 0.11.0 最新功能解读

Apache Flink

flink

程序员成长第四篇:程序员的职业天花板

石云升

28天写作 2月春节不断更 职场天花板

怎么理解Kafka消费者与消费组之间的关系?

李尚智

Java 大数据 程序员 架构

工业绿色哪家强?3D可视化盾构机构建隧道,推动设备预测性运维

一只数据鲸鱼

物联网 数据可视化 绿色交通 绿色工业 盾构机

即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

ZEGO即构

终于搞懂了Python模块之间的相互引用问题

华为云开发者联盟

Python 路径 代码 模块

CSS开发过程中的20个快速提升技巧

华为云开发者联盟

CSS

架构师训练营大作业

Geek_f06ede

【JS】事件委托

德育处主任

JavaScript 大前端 js 2月春节不断更

长篇总结之JavaScript,巩固前端基础

我是哪吒

JavaScript 程序员 面试 大前端 2月春节不断更

天天向上跑分模式介绍开发

luluhulian

使用logstash作为docker日志驱动收集日志

远鹏

Docker Logstash 日志系统

2021版阿里Java亿级并发设计手册:基础+数据库+缓存+消息队列+分布式+维护+实战

Java架构追梦

Java 阿里巴巴 面试 系统架构 亿级并发

redis分布式锁的这些坑,我怀疑你是假的开发

华为云开发者联盟

redis 分布式 分布式锁 服务器 value

使用V8和node轻松profile分析nodejs应用程序

程序那些事

性能优化 Profile nodejs 性能分析 程序那些事

IDEA永久注册码来了!!!(支持2020.3.1版本)

程序员生活志

IDEA

关于京东技术,你想了解的都在这里丨征文活动获奖及优秀专栏推荐

京东科技开发者

京东 征文大赛

零基础实现Java直播(二):实现流程

ZEGO即构

浪潮云洲工业互联网平台创新实践,受权威机构关注!

工业互联网

2021年的十五个DevOps趋势预测

禅道项目管理

DevOps 微服务 自动化 趋势

产品经理:一款用户全量会话轨迹管理产品是怎么炼成的?

博睿数据

架构师训练营大作业(二)

Geek_f06ede

Kafka 发送消息过程中拦截器的用途?

李尚智

Java kafka 程序员 架构

一款基于 Web 的通用数据管理工具(转载)

BinTools图尔兹

数据库 运维 开发工具 dba 数据管理工具

并发队列:PriorityBlockingQueue和DelayQueue案例使用

叫练

并发编程 队列 优先级队列 条件队列 并发队列

电子书下载|2020 年云原生年货小红书来啦!

阿里巴巴云原生

容器 微服务 开发者 云原生 k8s

图解分析:Kafka 生产者客户端工作原理

李尚智

Java 程序员 架构 kafak

看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点

华为云开发者联盟

Kubernetes 微服务 kubeedge 边缘

目前的区块链IPFS矿机模式交易系统开发的简单解析

v16629866266

Elasticsearch 搜索结果解析

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

MDC Android专场:账户同步备份框架与Web&Native混合开发_JavaScript_贾国清_InfoQ精选文章