【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  谷歌正式宣布将Android 8.0命名为Oreo

  北京时间8月22日凌晨,谷歌在纽约市召开发布会,正式宣布Android 8.0操作系统将被命名为“奥利奥”(Oreo)。另外,谷歌还在加州山景城公司总部发布了官方“奥利奥”超级英雄Bugdroid雕像。

  在宣布Android 8.0命名后不久,谷歌Android工程副总裁戴夫·伯克(Dave Burke)通过Twitter消息发布了位山景城总部园区的官方雕像的照片。跟此前几年有所不同的是,当时的Bugdroid雕像都是站在“美味点心”的旁边或是顶上的,而今年的雕像则将奥利奥的主题整合到了人物中去。另外,这个Android超级英雄雕像的身旁四周还堆满了奥利奥饼干。

  谷歌还在纽约市和山景城发布会上分发了成包的奥利奥饼干,这些饼干上都有标准的“奥利奥”Bugdroid形象,其奶油夹心是绿色的。

  投资者建议Uber与特斯拉合并 马斯克任CEO

  北京时间8月21日晚间消息,Uber早期投资者詹森·卡拉坎尼斯(Jason Calacanis)日前表示,Uber应与特斯拉合并,由特斯拉CEO埃隆·马斯克(Elon Musk)兼任Uber CEO。

  卡拉坎尼斯认为,Uber与特斯拉合并后,Uber将可以获得其迫切需要的自动驾驶技术,同时还能将特斯拉的业务拓展到更多市场。

  卡拉坎尼斯早在2009年就投资了Uber,他说:“如果两家公司合并,新公司将战胜当前交通服务流域的任何一家竞争对手。”

  Intel正式宣布第八代酷睿处理器:首发15W低压

  8月21日晚,Intel发布了最新的第八代Core处理器,和之前预料的一样,首发的是TDP为15W的低压处理器,主要用于超极本上面。

  Intel率先在今天发布的共有四款处理器,分别是Core i7-8650U、Core i7-8550U、Core i5-8350U、Core i5-8250U。这四款处理器均采用四核心八线程设计,根据之前的曝光,性能比7代提升50%左右。

  这四款处理器的具体架构名字叫做Kaby Lake Refresh,即使是i5也是采用四核八线程设计,不过由于TDP的限制,频率方面基准均低于2GHz,不过最高Boost可以达到4.2GHz。

  Intel还表示桌面版的Coffee Lake处理器将于2017年四季度正式发布,而基于10nm的Cannon Lake将于2018年第一季度到来。

  iPhone 8的人脸识别速度将达到百万分之一秒级别

  根据来自韩国媒体《韩国先驱报》的最新消息称,三星目前正在为苹果iPhone 8生产OLED显示屏。而这块屏幕所使用的面部识别系统,只需要百万分之一秒的时间,就能完成整个识别过程。

  之前有消息称,苹果将在iPhone 8上放弃一直都在使用的Touch ID指纹识别系统,并且用人脸识别功能来取代前者作为Apple Pay等服务身份识别的验证方式。

  同时根据《华尔街日报》的消息称,iPhone 8的人脸识别系统还整合了红外功能,因此即使在黑暗或光线比较弱的环境中,依然可以正常工作。

  三星官方自曝Note 8外型

  8月22日,有网友发现,三星网站的“临时工”在官网放出了Note 8的渲染图,并在随后立即删除。

  相比于上半年推出的Galaxy S8,Note 8要显得更加方正一些,该机保留了18.5:9比例的全视曲面屏,S-Pen依旧会是这款手机的一大卖点。

  根据澳洲媒体Ausdroid带来的三星Galaxy Note 8营销手册谍照显示,Note 8的外形与此前泄露的渲染图没有什么区别,6.3英寸QHD+分辨率的全视曲面屏,背面则配有平行排列的双摄像头和后置指纹解锁模块,具备IP68级防水防尘功能,支持虹膜识别和无线充电功能。

  配置上,Note8的双摄像头能带来2x光学变焦功能,拥有F1.7的大光圈,支持光学防抖技术。此外,三星Note 8还将与Smart Switch软件兼容,以帮助用户从旧手机中转移照片、联系人和歌曲等文件。


  在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  一、了解MVC模式

  在开始学习Adapter之前我们要来了解下这个MVC模式。说起MVC模式,估计很多同学已经或多或少听说过,可能在前面的Java开发中也有所接触。

  MVC全名是Model View Controller,是模型(model)、视图(view)、控制器(controller)的缩写。一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  MVC各组件之间的关系如下图所示,可以清楚的知道各层之间的联系。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  在Android开发中,比较流行的开发框架模式采用的是MVC框架模式,采用MVC模式的好处是便于UI界面部分的显示和业务逻辑,数据处理分开。那么Android项目中哪些代码来充当M、V、C角色呢?

  Android 鼓励弱耦合和组件的重用,Android 中MVC的具体体现如下:

  模型(model):是应用程序的主题部分,所有的业务逻辑都应在该层(对数据库的操作、对网络等的操作都应该在model里面处理,当然对计算等操作也是必须放在该层的)。

  视图层(view):是应用程序中负责生成用户界面的部分。也是整个MVC架构中用户唯一可以看到的一层,接收用户的输入,显示用户的处理结果。一般用XML文件进行界面的描述,使用的时候可以非常方便的引入。

  控制层(controller):是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分。Android的控制层的重任通常落在了众多Activity的肩上,这句话也就暗含了不要在Activity中写过多代码,要通过Activity交给model业务逻辑处理层处理,这样做的另外一个原因是Android中的Activity的响应时间是5秒,如果耗时的操作放在这里,程序很容易无响应。

  在MVC模式中其实控制器Activity主要是起到解耦作用,将View视图和Model模型分离,虽然Activity起到交互作用,但是一般在Activity中有很多关于视图UI的显示代码,因此View视图和Activity控制器并不是完全分离的,也就是说一部分View视图和Contronller控制器Activity是绑定在一个类中的。

  使用MVC模式的优点:

  耦合性低。所谓耦合性就是模块代码之间的关联程度。利用MVC框架使得View(视图)层和Model(模型)层可以很好的分离,这样就达到了解耦的目的,所以耦合性低,减少模块代码之间的相互影响。

  可扩展性好。由于耦合性低,添加需求,扩展代码就可以减少修改之前的代码,降低bug的出现率。

  模块职责划分明确。主要划分层M、V、C三个模块,利于代码的维护。

  什么时候适合使用MVC设计模式?当然一个小的项目且无需频繁修改需求就不用MVC框架来设计了,那样反而觉得代码过度设计,代码臃肿。一般在大型项目中,且业务逻辑处理复杂,页面显示比较多,需要模块化设计的项目使用MVC就有足够的优势了。

  二、Adapter概述

  Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView、GridView)等地方都需要用到Adapter。

  Android的适配器负责为列表组件提供数据源,也负责将单独的数据元素转换为显示在列表组件中的特定视图,如ListView的适配器关系如下图所示。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  Adapter本身只是一个接口,它派生了 ListAdapter和SpinnerAdapter两个子接口,其中 ListAdapter 为 AbsListView 提供列表项,而 SpinnerAdapter 为 AbsSpinner 提供列表项。Adapter接口及其实现类的继承关系图如下图所示。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  上图中标红粗线框标出的是比较常用的Adapter。从图中可以看出几乎所有的Adapter都继承了 BaseAdapter,而BaseAdapter同时实现了 ListAdapter、SpinnerAdapter 两个接口,因此 BaseAdapter 及其子类可以同时为 AbsListView、AbsSpinner提供列表项。

  Adapter的几个常用实现类如下。

  ArrayAdapter:简单、易用的Adapter,通常用于将数组或List集合的多个值包装成多个列表项。

  SimpleAdapter:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。

  SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装Cursor提供的数据。

  BaseAdapter:通常用于被扩展,扩展BaseAdapter可以对各列表项进行最大限度的定制。

  那么本节先通过一个示例学习如何使用ArrayAdapter创建ListView,关于SimpleAdapter和BaseAdapter会在后续几期进行学习,而SimpleCursorAdapter会在数据库部分进行学习。

  三、ArrayAdapter示例

  继续使用WidgetSample工程的listviewsample模块,在app/main/res/layout/目录下创建arrayadapter_layout.xml文件,在其中填充如下代码片段:

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  接下来为ListView提供Adapter,Adapter决定了ListView所要显示的列表项。在java包下创建ArrayAdapterActivity.java文件,加载上面新建的布局文件,具体代码如下:

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  上面的程序中前面两行粗体代码创建了一个ArrayAdapter,创建ArrayAdapter时必须指定如下三个参数。

  context:要使用的上下文环境,几乎创建所有组件都需要传入Context对象。

  resource: 要使用的视图资源 ID,该视图将作为ArrayAdapter的列表项组件。这里使用了Android系统中自带的视图资源,系统预定义的视图资源主要有以下几种:

  android.R.layout.simple_list_item_1: 单独一行的文本框。

  android.R.layout.simple_list_item_2: 两个文本框组成。

  android.R.layout.simple_list_item_checked: 每项都是由一个已选中的列表项。

  android.R.layout.simple_list_item_multiple_choice: 都带有一个复选框。

  android.R.layout.simple_list_item_single_choice: 都带有一个单选钮。

  objects:要实际显示的数组或List,将负责为多个列表项提供数据。 该数组或List包含多少个元素,就将生成多少个列表项。

  上面的程序中后面几行粗体代码为ListView列表项添加点击事件监听器,当用户点击某列表项的时候,就会收到onItemClick事件,然后做消息提示或者其他需要的处理。

  修改启动的Activity,然后运行程序,可以看到下图左侧所示列表界面。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  点击列表中的某一项的时候,会弹出消息提示,如上图右侧所示。

  关于Adapter的简单了解先到这里,其他更复杂的Adapter使用后面陆续学习。

  今天就先到这里,如果有问题欢迎留言一起探讨,共同成长!

  此文章版权为今日头条号分享达人就是我——鑫鱻所有,若需转载请联系作者授权,特此声明!

  往期总结分享:

  第1节:Android的前世今生

  第2节:Android 系统架构和应用组件那些事

  第3节:带你一起来聊一聊Android开发环境

  第4节:正确安装和配置JDK

  第5节:善用ADT Bundle

  第6节:配置优化SDK Manager

  第7节:搞定Android模拟器

  第8节:HelloWorld,第一趟旅程出发点

  第9节:Android实战,不懂代码也可以开发

  第10节:开发IDE迎来Android Studio

  第11节:运行Android Studio工程

  第12节:熟悉Android Studio界面

  第13节:Android Studio配置优化

  第14节:使用高速Genymotion

  第15节:掌握Android Studio项目结构

  第16节:Android用户界面开发概述

  第17节:TextView属性和方法大全

  第18节:EditText的属性和使用方法

  第19节:Button使用详解

  第20节:CheckBox和RadioButton使用大全

  第21节:ToggleButton和Switch使用大全

  第22节:ImageView的属性和方法大全

  第23节:ImageButton和ZoomButton使用

  第24节:自定义View简单使用

  第25节:简单且最常用的LinearLayout

  第26节:layout_gravity和gravity大不同

  第27节:正确使用padding和margin

  第28节:轻松掌握RelativeLayout相对布局

  第29节:善用TableLayout表格布局

  第30节:两分钟掌握FrameLayout帧布局

  第31节:少用的AbsoluteLayout绝对布局

  第32节:新推出的GridLayout网格布局

  第33节: Android事件处理概述

  第34节:Android中基于监听的事件处理

  第35节:Android中基于回调的事件处理

  第36节:Android系统事件的处理

  第37节:初识ListView

  (2017-08-18)


  通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件、选框的状态切换事件。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  一、Android事件处理

  Android提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理。

  基于监听的事件处理:主要做法就是为Android界面组件绑定特定的事件监听器,前面小节已经见到大量这种事件处理的示例。

  基于回调的事件处理:主要做法就是重写Android组件特定的回调方法, 或者重写Activity的回调方法。Android为绝大部分界面组件都提供了事件响应的回调方法,开发者只要重写它们即可。

  一般来说,基于回调的事件处理可用于处理一些具有通用性的事件,基于回调的事件处理代码会显得比较简洁。但对于某些特定的事件,无法使用基于回调的事件处理,只能采用基于监听的事件处理。

  本期先来学习基于监听的事件处理,后面再学习基于回调的事件处理,关注分享达人秀获取第一手教程,也可以加小编好友拽入Android零基础入门技术讨论微信群共同进步。

  二、基于监听的事件处理概述

  基于监听的事件处理是一种更“面向对象”的事件处理,在事件监听的处理模型中主要涉及如下三类对象。

  Event Source (事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。

  Event (事件):事件封装了界面组件上发生的特定事情(通常就是一次用户操作)。如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。

  Event Listener (事件监听器):负责监听事件源所发生的事件,并对各种事件做出相应的响应。

  当用户按下一个按钮或者单击某个菜单项时,这些动作就会激发一个相应的事件,该事件就会触发事件源上注册的事件监听器(特殊的Java对象),事件监听器调用对应的事件处理器 (事件监听器里的实例方法)来做出相应的响应。

  每个组件均可以针对特定的事件指定一个事件监听器,每个事件监听器也可监听一个或多个事件源。因为同一个事件源上可能发生多种事件,委派式事件处理方式可以把事件源上所有可能发生的事件分别授权给不同的事件监听器来处理;同时也可以让一类事件都使用同一个事件监听器来处理。

  Android事件处理流程如下图所示:

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  从上图可以知道,基于监听的事件处理模型的流程如下:

  为某个事件源(界面组件)设置一个监听器,用于监听用户操作。

  当用户操作时,会触发事件源的监听器。

  生成了对应的事件对象。

  将这个事件源对象作为参数传给事件监听器。

  事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法)。

  Android中基于监听的事件处理模型的开发步骤如下。

  获取普通界面组件(事件源),也就是被监听的对象。

  实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。

  调用事件源的setXxxListener方法将事件监听器对象注册给普通组件(事件源)。

  对于这三件事情,事件源可以是任何界面组件,不太需要开发者参与;注册监听器也只要一行代码即可,因此事件编程的关键就是实现事件监听器类。

  在基于监听的事件处理模型中,事件监听器必须实现事件监听器接口,Android为不同的界面组件提供了不同的监听器接口,这些接口通常以内部类的形式存在。以View类为例,它包含了如下几个内部接口。

  View.OnClickListener:单击事件的事件监听器必须实现的接口。

  View.OnCreateContextMenu Listener :创建上下文菜单事件的事件监听器必须实现的接口。

  View.onFocusChangeListener:焦点改变事件的事件监听器必须实现的接口。

  View.OnKeyListener:按键事件的事件监听器必须实现的接口。

  View.OnLongClickListener:长按事件的事件监听器必须实现的接口。

  View.OnTouchListener:触摸事件的事件监听器必须实现的接口。

  通过前面的学习,知道事件监听器就是实现了特定接口的Java类的实例。在程序中实现事件监听器,通常有如下几种形式。

  匿名内部类形式:使用匿名内部类创建事件监听器对象。

  内部类形式:将事件监听器类定义成当前类的内部类。

  外部类形式:将事件监听器类定义成一个外部类。

  Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。

  直接绑定到标签形式:直接在xml布局文件对应的Activity中定义一个事件处理方法,然后在布局文件中引用要触发的事件。

  三、使用匿名内部类作为事件监听器

  大部分时候,事件处理器都没有什么复用价值(可复用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式是目前使用最广泛的事件监听器形式,在前面的基本组件学习中也是使用的该种方法来绑定监听器。

  接下来通过一个简单的示例程序来学习Android使用匿名内部类作为事件监听器。

  同样使用WidgetSample工程,继续使用app/main/res/layout/目录下的activity_main.xml文件,在其中填充如下代码片段:

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  为了监听按钮的点击事件,在Java代码中为其添加点击事件监听器,具体代码如下:

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  上面程序中的粗体字部分使用匿名内部类创建了一个事件监听器对象,“new监听器接口”或“new事件适配器”的形式就是用于创建匿名内部类形式的事件监听器。

  运行程序,点击按钮,可以看到下图所示界面效果。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  对于使用匿名内部类作为事件监听器类的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果Java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器类。

  Android中基于监听的事件处理的其他四种形式下期再继续学习。

  今天就先到这里,如果有问题欢迎留言一起探讨,共同成长!

  此文章版权为今日头条号分享达人就是我——鑫鱻所有,若需转载请联系作者授权,特此声明!

  往期总结分享:

  第1节:Android的前世今生

  第2节:Android 系统架构和应用组件那些事

  第3节:带你一起来聊一聊Android开发环境

  第4节:正确安装和配置JDK

  第5节:善用ADT Bundle

  第6节:配置优化SDK Manager

  第7节:搞定Android模拟器

  第8节:HelloWorld,第一趟旅程出发点

  第9节:Android实战,不懂代码也可以开发

  第10节:开发IDE迎来Android Studio

  第11节:运行Android Studio工程

  第12节:熟悉Android Studio界面

  第13节:Android Studio配置优化

  第14节:使用高速Genymotion

  第15节:掌握Android Studio项目结构

  第16节:Android用户界面开发概述

  第17节:TextView属性和方法大全

  第18节:EditText的属性和使用方法

  第19节:Button使用详解

  第20节:CheckBox和RadioButton使用大全

  第21节:ToggleButton和Switch使用大全

  第22节:ImageView的属性和方法大全

  第23节:ImageButton和ZoomButton使用

  第24节:自定义View简单使用

  第25节:简单且最常用的LinearLayout

  第26节:layout_gravity和gravity大不同

  第27节:正确使用padding和margin

  第28节:轻松掌握RelativeLayout相对布局

  第29节:善用TableLayout表格布局

  第30节:两分钟掌握FrameLayout帧布局

  第31节:少用的AbsoluteLayout绝对布局

  第32节:新推出的GridLayout网格布局

  (2017-08-13)


  Android 8.0将会在8月上旬释出,而Google将会优先让自家Pixel及Nexus手机更新,而向来对于软体更新积极的Sony Mobile ,也很可能会在2017 IFA登场的Xperia新机预载Android 8.0作业系统。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  Sony旗下可升级的手机名单有Xperia XZ Premium、Xperia XZS、Xperia XA1 Ultra、Xperia XA1、Xperia XZ、Xperia X Compact、Xperia X Performance、Xperia X,虽然名单内没有出现Xperia Z5系列,不过这也并非是Sony Moible正式对外公告,仅供参考。暂时还有有国产手机的消息,有消息,第一时间通知大家。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  (2017-08-07)


  之前一直在百度阅读维护的书 《爱上Android》,已经由人民邮电出版社出版。起这个书名的主要原因是我非常喜爱从事开发Android程序的事业,也非常热爱分享技术。

  心理专家研究过人心理周期的变化,结论证实大部分人连续、专注的干一件事的时间很难超过18个月。当你能坚持一件事做18个月的时候证明你至少战胜了百分之九十的人。

  很庆幸的是,我成为了剩余百分之十的人,坚持了两年去完成这一本书。

  在此期间,我的角色也升级成了一位父亲,我真的非常感谢我的妻子。写书过程中占用了很多本应是陪伴她的时间,但她毫无怨言,一直都在默默地支持我,才使得我能专心的投入我的工作以及写作中。可以毫不夸张的说,没有我妻子就没有这本书的面世。

  本书主要特色

  1.坚持更新知识点

  互联网技术发展一日千里。写作的同时Android版本也在更新,两年期间,Android 从6.0 预览版到 8.0 预览版。

  为了保证知识不过期,写过的知识点我反复更新了好几个版本,甚至开始印刷前都在更新——今年5月底,Google官方认可 Kotlin 开发 Android,当时书也马上开始印刷,我第一时间联系出版社,专门加了一节使用 Kotlin 开发 Android。

  不仅限于知识点更新,包括一些细节,比如封皮设计都仔细推敲:

  Android Studio 预览版图标颜色换了,不再是正式的安卓绿,而变成了醒目的黄色。预览版的颜色更加能体现知识点迭代,为此我专门和出版社编辑沟通,把本书的封皮换成相近的颜色。

【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并
【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并

  2.录制视频

  我一直认为看书学习的效率要比看视频快,但是刚入门的时候,看视频更加直观一些。

  为了满足新手希望能快捷、方便入门的心理,我专门针对刚开始的几章录制了几十段视频。为了保证视频的录制质量,专门高价购买了外置声卡和话筒。

  视频绝不是照着书里的文字念,而是把写代码的技巧、过程、思路都展现出来。

  每录制一段十几分钟的视频,我都需要花费将近一天的时间去准备,录制效果差强人意的直接删掉,重新进行录制。

  本书主要内容

  书里的基本内容主要包括,开发环境搭建,界面搭建,Activity知识,数据存储,网络编程,图片处理,复杂控件,Fragment,广播接受者,服务,动画。除了这些还介绍了开发必不可少的技能,包括屏幕适配,性能优化,自定义控件和NDK编程。 最后一章通过一个完整的新闻客户端项目整合了前面的知识点。

  这绝不是一本中庸的书,里面每个知识点都强调实用二字

  撰写这本书的过程中,我倾尽了我的热情与脑力,对每个知识点都深入剖析,既没有盲目罗列一大段代码留给读者自己慢慢看的情况,也不会出现把所有的知识点都堆到一起让读者自行领会的消极态度,而是循序渐进的讲述开发过程中必备的知识点,使读者能在将来的实际开发过程中运用到很多。

  预售

  现在《爱上Android》已经在京东预售,欢迎购买。地址:

  京东-爱上Android http://item.jd.com/12144527.html

  试读-爱上Android http://www.epubit.com.cn/book/details/4885

  说实在话,写书真不是为了赚钱,尤其是技术性书籍,写这本书还是希望自己能够帮助到一些人。

  大家看了这本书之后,要是觉得写得好,可以帮忙宣传宣传;要是觉得写的不好,在博客或者公众号里留言,请指出不足之处,我会努力改正。

  谢谢大家!

  (2017-08-03)

版权声明:本文源自 网络, 于,由 楠木轩 整理发布,共 10989 字。

转载请注明: 【科技早报】谷歌将Android 8.0命名为Oreo 投资者建议Uber与特斯拉合并 - 楠木轩