Google 终成“硬件公司” 迫不得已还是顺应时代?

谷歌正式宣布进入硬件领域,任命Dennis Woodside负责收购后的摩托罗拉业务。此举旨在利用摩托罗拉的专利应对法律挑战,并借助其现有能力制造智能手机和平板电脑。目标是创造完美的Android体验,同时利用Google的技术优势改善设备性能。

不知道是受了苹果的“刺激”还是微软的“启发”, Google终于大大方方承认它也是硬件公司的一员了,这个曾今的搜索引擎公司借助摩托罗拉作为切入口能在硬件市场有什么作为呢? 它能跟苹果,三星,微软来场实实在在的较量吗?

Google正式进军硬件,从摩托罗拉着手。

Google CEO 拉里佩奇最近正式决定让Dennis Woodside 接手刚刚斥资125亿收购的摩托罗拉;后者建立了85年,1980年推出第一部手机,90年因StarTAC出名,2004年推出了标志性的RAZR,然后在最近智能手机时期没落。

1. Google接手摩托罗拉的目的,首先是要利用其 1万7千多个专利来迎接Oracle (ORCL), Microsoft (MSFT), Apple 的专利官司;其次是为了利用摩托罗拉已有基础生产智能手机和平板电脑,以求在移动设备领域占一席之地;然后力图做出一个完美设计,完美包装,完美运作的Android产品。

这也意味着Google正式进军竞争激烈,利润偏低的硬件行业。 Google的Android收益在2011年是6亿美金,苹果是330亿(包括iPhone和iPad);此次借用摩托罗拉,仍会保留摩托罗拉的“M”商标,准备借助Google强大的工程师资源来达到提高电池寿命,提高数字图片的功能,并把Google软件的创新性延续到摩托罗拉设备上。

2. Woodside认为摩托罗拉去年发布了20几款手机,数量非常多;今年他准备重点打造几个设备然后利用Google庞大的市场资源让它脱颖而出。在2009年,Woodside让Google的年收益率从108亿美元上升到175亿美元,此次硬件市场,Google对Woodside同样抱着很高的信心。

2009年摩托罗拉推出Droid智能手机,在2010年市场份额占到4.8%,但当三星流行的Android手机涌进来时,摩托罗拉2011年市场份额退回3.3%。所以看Woodside怎么唤醒摩托罗拉将是很有看头的事。

Google的硬件历史:

Google过去在硬件市场也有过动作,但都不是很顺利。它曾跟硬件厂商合作推出三款手机,Nexus One, Nexus S, 和 Galaxy Nexus,但没有一款能够跟iPhone相提并论的;它去年的 Chrome 电脑也没有引起足够的注意;另外一个跟Sony和LG合作的Google TV收到的反馈也并不热烈。

为什么Google非要进军硬件界?

Google作为一家巨头公司,进军硬件是对苹果取得巨大成功的本能回应,苹果 2010年度年收入较2009年增长了430亿美元比Google 2010年的总收入380亿美元还多,为此Google还成立了秘密的硬件研发室 Google X lab,而且收购了曾为第一个Galaxy Nexus设计外形的设计公司Mike and Maaike。

另外Google也打算进军平板电脑市场,并直言针对iPad 市场; 如今Google加入,有望改写Android平板市场三年以来仅有的9%的市场份额。

虽然摩托罗拉近期不能明显提升Google财政收入,但在将来是一定会产生重要影响的;拉里佩奇同时表示:即使不能通过摩托罗拉在移动设备有所作为,Google也会转向以计算机为中心的硬件业务,就像微软一样。

Via BW

济慈 供雷锋网专稿,转载请注明!)
<think>我们正在讨论的是uni-app框架中的路由方法。uni-app是一个使用Vue.js开发跨平台应用的框架。在uni-app中,路由管理通常使用uni.navigateTo、uni.redirectTo等方法,而`uni.$u.route`是uView UI框架(一个基于uni-app的UI框架)提供的一个路由方法,它封装了uni-app的原生路由方法,提供了一些便捷的功能。 根据问题描述,用户使用的是uView的2.0.38版本,并且希望使用`uni.$u.route`统一进行路由跳转,但是当前版本的`uni.$u.route`方法缺少类似`events`、`success`、`fail`等配置参数(这些参数在uni-app的原生路由方法中是存在的)。因此,用户不得不混用原生的路由方法和uView封装的方法。首先,我们需要了解uView的`uni.$u.route`方法在2.0.38版本中支持的参数。根据uView的文档(如果没有文档,可以查看源码),通常`uni.$u.route`方法支持以下参数:- url:跳转的页面路径- params:传递的参数,对象形式-type:跳转类型,如'navigateTo'、'redirectTo'、'switchTab'、'reLaunch'等但是,它可能不支持像`events`(用于监听被打开页面发送到当前页面的数据)、`success`(跳转成功的回调)、`fail`(跳转失败的回调)等参数。为了解决这个问题,我们可以考虑以下几种方案: 1. **升级uView版本**:查看uView的最新版本是否已经支持这些参数。如果支持,升级可能是最简单的解决方案。2.**修改uView源码(不推荐)**:如果不想升级或者最新版本也不支持,可以修改uView的源码,添加对这些参数的支持。但是,这会导致后续升级困难,并且需要自己维护。3.**混用原生方法**:在需要使用`events`、`success`、`fail`等参数的地方,使用uni-app的原生路由方法(如`uni.navigateTo`),而在其他地方使用`uni.$u.route`。这是用户目前的做法。4.**扩展`uni.$u.route`方法**:我们可以自己封装一个扩展版本的`$u.route`方法,使其支持这些参数。这需要了解当前`$u.route`方法的实现,并在其基础上进行扩展。由于我们无法确定uView后续版本是否会加入这些参数,而且用户希望统一使用`$u.route`,因此我们可以选择方案4:扩展`$u.route`方法。 以下是一个扩展`$u.route`方法的示例。我们将创建一个新的方法(例如`$u.extendedRoute`)或者直接覆盖`$u.route`方法(如果确定不会影响其他功能),使其支持`events`、`success`、`fail`等参数。 **注意**:在覆盖原有方法之前,请确保备份原有方法,并且了解可能带来的影响。###扩展实现思路1.首先,我们需要获取uView原有的`route`方法。2.然后,创建一个新的路由方法,它接收一个配置对象,该对象包含原有方法支持的参数(url, params, type)以及新增的`events`、`success`、`fail`等参数。 3.在新的方法中,根据传入的`type`调用uni-app对应的原生路由方法(如`uni.navigateTo`),并将相应的参数传递过去。4.同时,我们也要处理`params`参数(将参数拼接在url上),因为uView原本的方法会处理参数。 ###代码实现我们可以在项目的入口文件(如`main.js`)中,或者在App.vue的`onLaunch`事件中进行扩展。 ```javascript//在main.js或App.vue中importuView from'uview-ui' //保存原有的route方法const originalRoute =uView.$u.route//扩展后的route方法uView.$u.route= function(options){//如果options中包含events,success,fail等参数,则使用uni-app的原生方法if(options.events|| options.success ||options.fail ||options.complete){//根据type调用不同的原生方法consttype =options.type|| 'navigateTo'//构建跳转的url,包括参数let url= options.urlif(options.params){const params= options.params//将参数对象转换为字符串const query= Object.keys(params).map(key=> {return`${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`}).join('&')url+= (url.includes('?') ?'&' :'?') +query}//调用uni-app的原生方法uni[type]({url:url,events: options.events,success:options.success,fail:options.fail,complete: options.complete})} else{//否则调用原有的route方法originalRoute.call(this, options)} }//将扩展后的uView挂载到Vue原型上(如果之前已经挂载过,则不需要重复挂载)Vue.prototype.$u =uView.$u```###解释-我们首先保存了uView原有的`$u.route`方法。 -然后重写了`$u.route`方法,新的方法会检查传入的options中是否包含`events`、`success`、`fail`或`complete`参数。 -如果有这些参数,则使用uni-app的原生路由方法(如`navigateTo`)进行跳转,并处理参数拼接(因为原生方法不会自动处理params对象,我们需要将其拼接到url上)。-如果没有这些参数,则调用原有的`$u.route`方法,以保持原有功能不变。###注意事项1.参数拼接:我们手动将`params`对象转换为url的查询字符串,这可能会和原有`$u.route`方法处理参数的方式有细微差别(比如原有方法可能处理了数组或嵌套对象,而这里只是简单处理)。如果原有方法有更复杂的参数处理,我们需要复制原有方法的参数处理逻辑。2.原有`$u.route`方法可能还支持其他配置(比如`animationType`、`animationDuration`等),如果我们需要这些配置,也需要在扩展中支持。但根据问题,我们主要关注`events`、`success`、`fail`等。3.如果uView后续版本更新了`route`方法,我们的扩展可能会覆盖新版本的功能。因此,在uView更新后,需要检查是否需要调整扩展方法。 ###替代方案如果不想修改全局的`$u.route`方法,也可以单独封装一个函数,然后在需要的地方调用。 ###相关问题根据要求,提出以下相关问题:§§相关问题§§: 1.在uni-app中,如何监听页面间的事件通信?2.uni-app的原生路由方法(如`navigateTo`)支持哪些参数? 3. uView UI框架的`$u.route`方法在最新版本中是否已经支持`events`、`success`、`fail`等参数? 4.在uni-app中,如何传递复杂对象(如包含数组或嵌套对象)作为路由参数?</think>关于 `uni.$u.route` 方法是否计划加入 `events`、`success`、`fail` 等参数的问题,以下是详细解答: ### 当前情况分析 1. **uView 2.0.38 现状** 在 uView UI 2.0.38 版本中,`uni.$u.route` 主要支持以下参数: ```javascript uni.$u.route({ url: '/pages/home/index', // 目标路径 params: { id: 1 }, // 传递参数 type: 'navigateTo' // 跳转类型(navigateTo/redirectTo等) }) ``` 但**不支持**原生路由方法中的 `events`、`success`、`fail` 等回调参数。 2. **原生路由方法对比** uni-app 原生路由方法(如 `uni.navigateTo`)支持完整回调: ```javascript uni.navigateTo({ url: '/pages/home/index', events: { /* 事件监听 */ }, success: () => { /* 成功回调 */ }, fail: (err) => { /* 失败回调 */ } }) ``` --- ### 解决方案:封装扩展方法 可通过扩展 `uni.$u.route` 方法使其支持回调参数。以下是实现代码: ```javascript // 在项目的公共工具文件中扩展 uView 路由(如 utils/router.js) export const extendedRoute = (options) => { const { events, success, fail, ...rest } = options; // 原生路由方法映射表 const nativeMap = { navigateTo: uni.navigateTo, redirectTo: uni.redirectTo, switchTab: uni.switchTab, reLaunch: uni.reLaunch }; // 获取跳转类型(默认为 navigateTo) const type = rest.type || 'navigateTo'; // 调用原生方法并传递扩展参数 nativeMap[type]({ url: rest.url, events, success: (res) => { // 可在此处添加统一逻辑(如埋点) success?.(res); }, fail: (err) => { // 统一错误处理逻辑 console.error('路由跳转失败:', err); fail?.(err); } }); }; // 挂载到 uni 对象(在 main.js 中初始化) import { extendedRoute } from '@/utils/router'; uni.$u.extendedRoute = extendedRoute; ``` ### 使用示例 ```javascript // 在页面中使用扩展方法 uni.$u.extendedRoute({ url: '/pages/detail/index', params: { id: 100 }, // uView 原生支持的参数 type: 'navigateTo', events: { // 接收被打开页面发送的数据 acceptData: (data) => console.log('收到数据:', data) }, success: () => console.log('跳转成功'), fail: (err) => console.log('跳转失败', err) }); ``` ### 关键点说明 1. **参数分离** - 通过 `const { events, success, fail, ...rest } = options` 分离出回调参数。 - `rest` 保留 uView 原生支持的参数(如 `url`/`params`/`type`)。 2. **原生方法映射** - 根据 `type` 动态调用对应的 uni-app 原生路由方法。 3. **统一错误处理** - 在 `fail` 回调中添加统一日志记录,方便调试。 4. **事件透传** - `events` 参数直接传递给原生方法,实现页面间通信。 --- ### 官方计划建议 1. **查看 GitHub Issues** 建议在 [uView GitHub Issues](https://github.com/umicro/uView2.0/issues) 中搜索 "route events" 或提交 Feature Request,询问官方是否计划支持。 2. **临时替代方案** 在官方未支持前: - 重要场景使用 `extendedRoute` 扩展方法 - 简单跳转继续用 `uni.$u.route` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值