开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

给 Web 开发人员推荐的开源图形库 —— 2D/3D

现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高,数据可视化、动画交互、2D/3D 等元素已然成为标配。 以下是为 Web 开发者推荐的一些精品开源图形库,旨在专注于最常见的问题和最常用的东西。将针对动画(Animation)、数据可视化(Data Visualization)、2D/3D 分别整理,欢迎保持关注。 给 Web 开发人员推荐的开源图形库 —— 动画 2D 一、绘图渲染 1、图形 PixiJS 一个 HTML5 构建引擎,用最快、最灵活的 2D WebGL 渲染器创建漂亮的数字化内容。旨在提供一个可以在所有设备上运行的快速轻量级 2D 库,帮助你创建丰富的交互式图形、跨平台应用和游戏,而无需深入到 WebGL API 或处理浏览器和设备的兼容性。 效果预览:点此查看 Fabric.js 一个可以轻松使用 HTML5 canvas 元素的库,在 Canvas 元素之上提供交互对象模型,同时还包含 SVG-to-canvas 解析器。它可以帮助你在画布上创建和填充对象,从简单的几何图形到成百上千路径组成的复杂图形。你可以通过鼠标轻松的移动、缩放和旋转这些对象,修改它们的属性(颜色、透明度,层叠顺序)等等。 效果预览:点此查看 2、立体像素 Obelisk.js 这是一个构建等距立体像素对象的 JavaScript 库,通过提...
编辑部的故事 发布于 4天前 阅读 4737 评论 16 点赞 17

Spring Cloud Eureka 入门 (二)服务提供者详解

  摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “优秀不是过去是一种心态”   「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spring Cloud Eureka 入门 (二)服务提供者详解 Spring Cloud Eureka 入门 (三)服务消费者详解 本文提纲 1. springcloud-eureka-sample 工程结构 2. 运行 springcloud-eureka-client-provider 服务提供者工程 3. 详解 springcloud-eureka-client-provider 服务提供者工程   一、springcloud-eureka-sample 工程结构 接着上一小节《Spring Cloud Eureka 入门 (一)服务注册中心详解》,我们成功运行了 Spring Cloud Eureka Server 工程作为服务注册中心工程。这小节,我们写一个作为客户端的服务提供者工程,服务提供者向服务中心注册或者下线服务实例。即图中的右侧 1 ,2 流程:   springcloud-eureka-sample 工程结构 ├── springcloud-eureka-client-customer ├── springcloud-eureka-client-provider └── springcloud-eureka-server 上面依次是 服务消费者工程、服务提供者工程和服务注册中心工程。   二、运行 springcloud-eureka-client-p...
泥沙砖瓦浆木匠 发布于 2周前 阅读 521

微信小程序 Node.js (基础六) Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。  但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
第九程序 发布于 3周前 阅读 861 评论 5

7月22日济南源创会火热报名,解读区块链的前世今生及未来趋势!

七月流火,OSC源创会带着自由、开放、分享的开源精神,也带着满满的干货主题,邀请济南的各位来约。
源创会

android模块化开发之aar——本地文件引用

如果你知道aar文件是个什么东西,直接切到“如何引用”吧~~~ ### 什么是aar文件: **官方**解释: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05105120_2fYT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201707/05104445_TSH1.png "在这里输入图片标题") 我来总结一下: aar首先它是一个后缀为.aar的文件,然后这个文件是在android项目里面使用的,它是一个android库文件,然后它比我们之前使用的.jar文件更强大!!!over~ ###如何生成: 首先得创建一个库,继续官方文档走起: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05110503_9XmH.png "在这里输入图片标题") example: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111002_PZjX.png "在这里输入图片标题") ![选择"Android Library"](https://static.oschina.net/uploads/img/201707/05111033_Kx6r.png "Android Library") **Next**一直到**finish**一个module就创建好了~ ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111241_6Fnd.png "在这里输入图片标题") > 接下来我在新建的aarlibr...
veidy 发布于 3周前 阅读 324

关于线程,还有这些是你需要知道的!

在日常开发中,线程常常被用作为提升程序效率的重要手段。在CoorChice的这篇文章中,CoorChice介绍了线程的基本运作。
CoorChice 发布于 3周前 阅读 3538 评论 25 点赞 17

Xposed从入门到弃坑:0x03、XposedHelpers类解析

感觉好久没更新xposed教程了。应该有两个月了,主要是工作太忙,没有时间写博客。这节主要讲解XposedHelpers类的一些用法,对前面内容有遗忘的可以再回过去预习下。 更多精彩内容可以关注我的博客:[www.wrbug.com](https://www.wrbug.com)
WrBug 发布于 4周前 阅读 395

Android基于UPnP/DLNA的智能设备媒体互联

有趣的 在一个项目工作中偶然接触到 UPnP -- 一个基于本地网络的即插即用设备互联协议标准,后来经了解发现 UPnP 是个很有趣的东西。这个协议有一些特性(详细信息可参考官方资料 http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf) ⦁ 对等,没有主次 所有 UPnP 网络中的设备及可以提供服务,也可以主动发起数据传输,设备的角色取决于软件(不像 USB 协议那样的主从模式)。如果一个设备实现了 AVTransport 那么它可以提供媒体渲染服务,例如一台智能电视;如果设备实现了 ContentDirectory 那么它可以提供流媒体服务,例如开启媒体流的功能的 PC;如果设备是使用 ControlPoint 那么它就像是个智能遥控器,例如安装一些 DLNA 控制软件的手机;一台设备可以同时支持多个服务,例如Windows Media Player它即可以接受渲染推送来的媒体,也可以吧媒体推送到其他设备上播放(Play To)。UPnP网络中的设备没有一个Master,所有设备都是对等。 ⦁ 即插即用,零配置 这个即插即用不是硬件层面的(不像USB那样的串行总线设备拓展),而是通过本地网络实现。设备可以动态加入网络(通过SSDP发现设备),传达其功能(使用XML描述),并了解其他设备的存在和功能。...
KnightMobi 发布于 4周前 阅读 1208 评论 2 点赞 4

微信小程序后台解密用户数据

微信小程序后台解密用户数据具体搭建步骤分享
第九程序 发布于 4周前 阅读 694 评论 6 点赞 1

cairo 图形库

简介 提到cairo,估计很少知道这还是一个图形库的名字(http://cairographics.org),Linux的两大流行桌面环境KDE和Gnome,其对应的基础组件是QT和GTK+,相对于框架性质的QT,GTK+则依然保持着自由与开放的传统,从底层绘图到上层程序库都由其他开源库组成,cairo就是GTK+采用的底层图形库,负责构建图形界面。cairo是一款开源的2d矢量图形库,支持多种后端输出,用c语言编写而且模块化设计得很出色。这篇博客介绍一份cairo的windows移植和定制(Visual Studio 编译),及跟windows的全新图形子系统DXGI对接,通过DXGI来显示cairo产生的图像帧,即基于cairo的不依赖操作系统GUI、不依赖于应用程序框架的图形库。博客的主要内容是介绍、分析、演示 cairo 图形库 cairo能够做各种复杂的点线图案绘制、填充、文字渲染、图像变换、剪切、层混合等等操作。但是他没有涉及到用户交互,如鼠标、touch、事件处理,交互窗口,这些统统没有,他只有专一的绘图。他有surface可以理解为画布,这个surface可以是基于内存(image surface,必选的surface)也可以基于某种backend(和操作系统或驱动接口对接),使用过程是创建一个surface,然后在surface里做各种绘图,最后使用Painting类...
KnightMobi 发布于 1个月前 阅读 450 评论 8 点赞 2

微信小程序实战篇-分类页面制作

今天第九程序要教大家微信小程序分类页面的制作,废话不多说,先上效果图。
第九程序 发布于 1个月前 阅读 1192 评论 5 点赞 5

微信小程序云端增强 SDK接入

XpmJS可以链接任何云端资源,为小程序、移动应用提供云资源通道和后端能力。降低开...
第九程序 发布于 1个月前 阅读 397 评论 1

你知道Thread线程是如何运作的吗?

我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
CoorChice 发布于 1个月前 阅读 4509 评论 26 点赞 17

一种新的移动APP保持登陆的实现机制介绍

新的移动APP保持登陆的安全机制
黄洪清 发布于 1个月前 阅读 754 评论 19 点赞 1

iOS直播--Nginx服务器搭建和RTMP,HLS推流实现

### Nginx介绍 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 > 简言之,Nginx本身是一个非常出色的HTTP服务器,具有占用内存少,高并发的特点。 安装 ``` brew install nginx-full --with-rtmp-module ``` 验证 ``` 终端输入 nginx 启动服务器 在浏览器中输入:http://localhost:8080,如下图,则开启成功。 ``` ![输入图片说明](https://static.oschina.net/uploads/img/2017...
她吃西红柿 发布于 1个月前 阅读 1254 评论 8 点赞 1

App开启深度链接

App开启深度链接,url直接启动app
veidy 发布于 1个月前 阅读 543 评论 4

基于ProtocolBuffer和ysocket的Swift即时通讯服务器搭建

### 介绍 Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,比起XML它更简单,文件更小,传输解析更快,原生支持java、c++、python,如果要在 iOS 上使用,可以直接使用 C++.但是编译过程很麻烦,因此这里使用的是第三方的库. Swift : https://github.com/alexeyxo/protobuf-swift ObjC : https://github.com/aerofs/protobuf-objc ### 优势 * 直接传递C/C++语言中一字节对齐的结构体数据,只要结构体的声明为定长格式,那么该方式对于C/C++程序而言就非常方便了,仅需将接收到的数据按照结构体类型强行转换即可。事实上对于变长结构体也不会非常麻烦。在发送数据时,也只需定义一个结构体变量并设置各个成员变量的值之后,再以char*的方式将该二进制数据发送到远端。反之,该方式对于Java开发者而言就会非常繁琐,首先需要将接收到的数据存于ByteBuffer之中,再根据约定的字节序逐个读取每个字段,并将读取后的值再赋值给另外一个值对象中的域变量,以便于程序中其他代码逻辑的编写。对于该类型程序而言,联调的基准是必须客户端和服务器双方均完成了消息报文构建程序的编写后才能展开,而该设计方式将会直...
她吃西红柿 发布于 1个月前 阅读 364

使用MediaCodec和RTMP做直播推流

本项目完全开源 项目Github地址:[AndroidInstantVideo](https://github.com/ChillingVan/AndroidInstantVideo) 码云地址:[AndroidInstantVideo](http://git.oschina.net/ChillingVan/AndroidInstantVideo) 目前开源的项目或市面上的Android直播客户端主要是用ffmpeg来实现推流的。本文将介绍使用Android原生的视频编码类MediaCodec实现直播推流。 ### 数据流及大致原理 这里所说的直播,就是将你的客户端产生的视频数据,实时发送到服务器上。服务器上的数据再实时地发送到播放客户端上。 * 以视频数据为例: **获取Camera画面** 首先是摄像头拍摄得到原始画面数据,这里原始画面数据的格式我们不用管,因为我们使用的是MediaCodec,所以我们会使用 camera.setPreviewTexture(surfaceTexture) 来利用Camera获取到的画面。 此处的原理可忽略,大致说明的话,就是Camera会把获得的画面保存为OpenGL的一个纹理,我们使用这个纹理就能使用Camera的画面。 **绘制画面** 在获得画面之后,我们要把这个画面(纹理)“画”到MediaCodec上。 如何画? MediaCodec提供一张’白纸’,也就是一个Surface,供我们把纹理画到上面。此处的API是 MediaCodec.createInputSurface() 怎么画?...
量子 发布于 1个月前 阅读 2257 评论 21 点赞 5

OC对象之旅 weak弱引用实现分析

# Runtime学习 -- `weak`应用源码学习 >   Runtime源码分析,带你了解OC实现过程。其中参考了大量的大神的代码以及文献,里面也有个人的见解,欢迎拍砖,欢迎交流。 ## 两种常见使用场景 ```Objective-C /// weak属性 @interface XX : XX @property(nonatomic,weak) Type* weakPtr; @end /// 代码块中使用 { /// 使用__weak __weak Type* weakPtr = [[SomeObject alloc] init]; } ``` 根据调试信息,发现两者的区别是: - 第一种进入到 `id objc_storeWeak(id *location, id newObj)方法` ``` /** * This function stores a new value into a __weak variable. It would * be used anywhere a __weak variable is the target of an assignment. * * @param location The address of the weak pointer itself * @param newObj The new object this weak ptr should now point to * * @return \e newObj */ id objc_storeWeak(id *location, id newObj) { return storeWeak (location, (objc_object *)newObj); } ``` - 第二种绕一个远路,先初始化 `id objc_initWeak(id *location, id newObj)` ``` Objective-C /** * Initialize a fresh weak pointer to some object l...
瞎折腾 发布于 1个月前 阅读 707

微信小程序,一个有局限的类似 React Native 轮子!

微信小程序就是一个类似RN的轮子,可以快速开发,有一定的适用场景,但是也有其局限性。(结论是基于微信小程序的示例代码做的解读,可能存在谬误
第九程序 发布于 2个月前 阅读 540 评论 4

微信小程序架构分析 (上)

相信不少上手试用了微信小程序开发者工具的开发者都会对其实现有些疑惑, 本文试图对其架构模型进行一些解析。
第九程序 发布于 2个月前 阅读 833 评论 2 点赞 1

给 Web 开发人员推荐的开源图形库 —— 2D/3D

现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高,数据可视化、动画交互、2D/3D 等元素已然成为标配。 以下是为 Web 开发者推荐的一些精品开源图形库,旨在专注于最常见的问题和最常用的东西。将针对动画(Animation)、数据可视化(Data Visualization)、2D/3D 分别整理,欢迎保持关注。 给 Web 开发人员推荐的开源图形库 —— 动画 2D 一、绘图渲染 1、图形 PixiJS 一个 HTML5 构建引擎,用最快、最灵活的 2D WebGL 渲染器创建漂亮的数字化内容。旨在提供一个可以在所有设备上运行的快速轻量级 2D 库,帮助你创建丰富的交互式图形、跨平台应用和游戏,而无需深入到 WebGL API 或处理浏览器和设备的兼容性。 效果预览:点此查看 Fabric.js 一个可以轻松使用 HTML5 canvas 元素的库,在 Canvas 元素之上提供交互对象模型,同时还包含 SVG-to-canvas 解析器。它可以帮助你在画布上创建和填充对象,从简单的几何图形到成百上千路径组成的复杂图形。你可以通过鼠标轻松的移动、缩放和旋转这些对象,修改它们的属性(颜色、透明度,层叠顺序)等等。 效果预览:点此查看 2、立体像素 Obelisk.js 这是一个构建等距立体像素对象的 JavaScript 库,通过提...
编辑部的故事 发布于 4天前 阅读 4737 评论 16 点赞 17

微信小程序 Node.js (基础六) Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。  但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
第九程序 发布于 3周前 阅读 861 评论 5

webView 加载本地文件ERROR_MESSAGE_MAIN ERROR_MESSAGE_REASON错误提示

     当时遇到这个错误我内心是崩溃的,查询搜索各大网页基本上都找不到webView提示这条错误,       报这个错误主要是我在做下载功能的时候,后台给我的文件类型doc,docx为一个type,所以我下载保存文件的时候直接存的.doc,导致本来是docx文档打开就提示这个错误。
YOrange 发布于 2个月前 阅读 409

iOS之UIWebView无法获取web标题

最近遇到了一个问题,就是在`UIWebView`的代理方法里,执行`document.title`的`js`代码无法获取网页标题,代码如下: ``` - (void)webViewDidFinishLoad:(UIWebView *)webView { // 取加载html文件的标题名 NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; } ``` 出现这个问题,我首先确定是不是代码的问题,经过分析,发现代码没有改动,但这次却无法获取网页标题,甚是奇怪。经过查找分析,问题是在这一版中,前端人员把网页的标题设置放在了异步操作里,导致`UIWebView`在加载网页完成后,在代理方法`webViewDidFinishLoad:`里无法立即获取标题,因为获取标题的方法是异步的,而网页加载完就会调用该代理方法,那时候的网页`title`还没有值,所以获取不到`title`的值。 下面是网页异步获取`title`的代码,使用了`jQuery`和`Ajax`技术来异步获取`title`: ``` $.ajax({ url: remoteur+'/api/innerMessageApi/noticeMessage.htm?callBackFunc=xx', type: 'get', dataType: 'jsonp', jsonpCallback:"xx", data: {msgId: msgId}, success: function(res){ console.log(res); if ( res.successFlag == 'Y' ){ content = res.conten...
飞鱼湾 发布于 16小时前 阅读 13

追溯“Android 系统的诞生地——美国硅谷” 写《深入理解Android内核设计思想(第2版)》前言时

Google大楼前摆放着Android的最新版本雕塑,历史版本则被放置在Android Statues Park中。写《深入理解Android内&...
louise 发布于 1个月前 阅读 25

android模块化开发之aar——本地文件引用

如果你知道aar文件是个什么东西,直接切到“如何引用”吧~~~ ### 什么是aar文件: **官方**解释: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05105120_2fYT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201707/05104445_TSH1.png "在这里输入图片标题") 我来总结一下: aar首先它是一个后缀为.aar的文件,然后这个文件是在android项目里面使用的,它是一个android库文件,然后它比我们之前使用的.jar文件更强大!!!over~ ###如何生成: 首先得创建一个库,继续官方文档走起: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05110503_9XmH.png "在这里输入图片标题") example: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111002_PZjX.png "在这里输入图片标题") ![选择"Android Library"](https://static.oschina.net/uploads/img/201707/05111033_Kx6r.png "Android Library") **Next**一直到**finish**一个module就创建好了~ ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111241_6Fnd.png "在这里输入图片标题") > 接下来我在新建的aarlibr...
veidy 发布于 3周前 阅读 324

微信小程序开发-校园网小程序搭建

高考完毕,想必广大学子和家长们都在忙着查询各所高校的信息,刚好上手微信小程序,当练手也当为自己的学校做点宣传,便当即撸了一个校园网微信小程序。
第九程序 发布于 15小时前 阅读 8

iOS 开发小总结

有时间就写点
_____1____ 发布于 15小时前 阅读 7

图文并茂解释Kotlin == 和 === 之间的差异

图文并茂解释Kotlin== 和 === 之间的意义
xiaolei123 发布于 2个月前 阅读 807 评论 15 点赞 3

java生成微信二维码,带页面跳转功能

package QRCode; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; /** * 需求说明:卖家在一个实体产品上贴一个二维码,买家收货后,微信扫码获取产品的详细信息 * 实现说明:卖家在出货前,把服务器上的产品详情页的链接地址(含有ID)生成二维码,买家收货后微信扫码,跳转到产品信息页即可查看 * 需要jar:zxing-code-2.3.jar,下载地址http://download.csdn.net/download/sanfye/8704583 * @author 加内特 * */ public class GenerateCode { private static final int BLACK = 0xFF000000; private static final int WHITE = 0xFFFFFFFF; public static void main(String[] args) { try { boolean flag = generateCode("518"); if (flag) { System.out.println("成功生成二维码"); } } catch (WriterException...
吐槽车 发布于 3个月前 阅读 47

自己动手设计一款iOS自动构建发布工具

在iOS开发中,开发者经常会需要打各种各样的软件包。有些提交测试,有些提交appstore,还有些可能要提交第三方平台。一款全自动的打包发布工具可以帮助我们事半功倍的完成这些工作。
珲少 发布于 10小时前 阅读 5

微信小程序实战篇-分类页面制作

今天第九程序要教大家微信小程序分类页面的制作,废话不多说,先上效果图。
第九程序 发布于 1个月前 阅读 1192 评论 5 点赞 5

iOS--环信集成并修改头像和昵称

  一、环信集成 使用Cocopods导入:    pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git'    pod 'Hyphenate' 二、初始化SDK  //AppKey:注册的AppKey,详细见下面注释。     //apnsCertName:推送证书名(不需要加后缀),详细见下面注释。     EMOptions *options = [EMOptions optionsWithAppkey:IMAPPKEY];     options.apnsCertName = @"istore_dev";     [[EMClient sharedClient] initializeSDKWithOptions:options]; //初始化EaseUI (可以与初始化SDK二选一,本人都写了,以防万一)     [[EaseSDKHelper shareHelper] hyphenateApplication:application   didFinishLaunchingWithOptions:launchOptions appkey:IMAPPKEY  apnsCertName:@"qy"   otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}]; 三、环信登录  在登录环信之前要登录自己的APP,这样后台要和环信后台交互(可以让后台自动注册环信),在APP登录成功时返回用户名和密码,用于后期的环信登录  //登录环信     EMError *error1 = [[EMClient sharedClient] loginWithUsername:[[NSUserDefaults standa...
指尖流年 发布于 2周前 阅读 23

微信小程序picker和range-key的用法

<picker bindchange="bindPickerChange" value="{{index}}" range="{{location}}" range-key="{{'name'}}"> <view class="picker"> 地州{{location[index]}} </view> </picker> range-key用于渲染picker的源是数组的情形,range-key制定了需要picker展示的内容。index是系统自动指定的array的下标,不用修改。 对应的数组内容如下: [{ "id": "XM4xZnN088X5", "name": "西双版纳州" }, { "id": "yrw6F6n30igs", "name": "昆明市" }] 注意range-key中的字段需要单引号指定。
独鸣在彼岸 发布于 3个月前 阅读 773 点赞 1

你不可不知的 React Native 混合用法(Android 篇)

## 前言 当前 React Native 虽说版本更新比较快,各种组件也提供的很全面了,但是在某些情况下,混合开发的方式才会快速缩短开发周期,原因无非就是原生平台的“底蕴”无疑更深,拥有众多且类型丰富的第三方支持库。很多情况下,运用这些库可以避免苦逼的重复劳动。接下来我们以 [jpush-react-native 插件](https://github.com/jpush/jpush-react-native)为例来看看在 React Native 中如何使用原生的第三方库。 ## 开始 在开始之前,你必须安装以下软件:npm 命令行工具,react-native 命令行工具, Android Studio。jpush-react-native 是[极光推送](https://www.jiguang.cn/)提供的 React Native 版本插件,可以让我们快速集成推送功能。实际上这个插件就是一个混合应用,使用他们自己的原生 SDK,并且封装了一些接口,让开发者可以在 JS 和原生平台之间互相调用。接下来我们只需要三个步骤就可以完成绝大多数原生库在 React Native 中的应用。 先明确两个概念,在 Android Studio 中一个项目往往会包含很多模块(Module),项目中的 build.gradle 配置一般对所有 module 生效。而 Module 中的 build.gradle 则配置了该 Module 所需的依赖或者任务等等。 #### 第一步——...
极光推送 发布于 3个月前 阅读 68

程序包android.support.multidex不存在解决方案

Android Studio 升级到2.3.1,gradle 插件版本升级到2.3之后,运行APP到6.0以上的模拟器上,报错:程序包android.support.multidex不存在 解决方案: 在dependencies域中添加依赖即可: compile 'com.android.support:multidex:1.0.1'
奔跑的野马 发布于 3个月前 阅读 95

小技巧:用户可以这样去反馈取消「滴滴出行」订单来规避支付 3 元起的取消费

 本文标签: 滴滴出行 订单取消费 订单取消收费 相信今年开始很多使用「滴滴出行」的朋友,常常会在软件中使用到以下场景: 取消订单需收费 其实很多时候并不是我们用户故意取消订单,而是迫不得已,比如说:   拼车后,几分钟后司机以各种理由不来接我,叫我取消订单 呼叫快车后,自动接单的司机距离我非常远,即便接单已经 3 分钟,但依然没有动静。这时迫于赶时间换上其它交通工具 呼叫快车后,司机不熟路线一直绕路,耽误了时间            ...... 这样的场景,为了不浪费彼此的时间,我们只好取消订单。但是当司机接单 3 分钟后,用户取消订单就需支付 3 元起的取消费,而且在接下来的操作中没有任何反馈或建议入口,你只有两种选择:一是确认取消并支付取消费;二是暂不取消,等司机到达目的地或司机未按时间到达时免费取消。 我相信很多人会选择第一种,但面对取消订单收费的事实却百般无奈,只能待到空闲时致电滴滴客服申诉。那么有更好的方法处理吗?其实是有的,只是滴滴藏得比较深。 深深的入口 点击头像,选择「客服」-「自助服务」-「订单取消收费」 点击后,进入「问题详情」,如果是因为司机原因导致需要取消订单,请点击「取消订单收费」处理...
taidupa 发布于 1个月前 阅读 24

angular4+ionic

Ionic Framework: 3.5.3 Ionic App Scripts: 2.0.2 Angular Core: 4.1.3 Angular Compiler CLI: 4.1.3 Node: 6.10.0
yizhichao 发布于 6天前 阅读 14

android模块化开发之aar——本地maven仓库发布和引用

在gradle 构建的android项目里面,有了一个爽得飞起的功能就是远程依赖。 如:我想引入okhttp 这个第三方开源网络请求框架,在eclipse开发时代,我们都是在github上要么把打包好的.jar文件下载下来导入,要么就是直接把源文件下载下来导入,一旦okhttp 在github有版本更新,我们又得进行同样的下载、导入工作。烦!在android studio 这么高大上的IDE出现之后,我们就只需一行代码搞定喽! ![输入图片说明](https://static.oschina.net/uploads/img/201707/10141917_JM6U.png "在这里输入图片标题") 如有版本更新,只需要更新版本号然后同步更新即可!简直不能再爽!既然这么好玩,那我们自己动手也玩一玩儿~通过android studio发布本地maven仓库,然后依赖导入项目! > 第一步:创建一个moudle "aarlibrary" > 第二步:maven发布到本地仓库 > 第三步:gradle 引入 第一步就不讲了,会开发android的都会 第二、三步是重点,如何在android studio 里面发布本地仓库?gradle 给我们提供了一个插件 “maven”!呵呵~ 好玩的来了,我们打开 aarlibrary 的build.gradle文件开始撸代码 ![输入图片说明](https://static.oschina.net/uploads/img/201707/10142039_XVEl.png "在这里输入图...
veidy 发布于 2周前 阅读 47 打赏 2

在RecyclerView的子布局中使用EditText在数据滚动后消失

同事在新的项目中遇到在RecyclerView的子布局中使用EditText,在第一项输入数据滚动出可视界面后,再次回到第一项后,输入的数据没有了。我想应该是RecyclerView回收了,而数据没有显示在界面上,我看过同事的代码后,就添加了如下代码: ```java String leaveMessage = bean.getMessage(); if (!TextUtils.isEmpty(leaveMessage)) { holder.et_liuyan.setText(leaveMessage); } holder.et_liuyan.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { confirmlist.get(position).setMessage(editable.toString()); } }); ``` 但是经过测试还是不行,就在百度和Stack OverFlow上搜索,发现还是有同样的问题, 参考链接地址:[在RecyclerView中使用EditText滚动后数据消失](http://www.qingpingshan.com/rjbc/az/237859.html/),[RecyclerView 多布局,Item中使用EditText刷新问题扫坑](http://blog.csdn.net/zhuhai__yi...
渊泉如渊 发布于 1个月前 阅读 86

Service 比我还持久的服务

**一直以来都被一个疑问困惑很久,Activity既然能使用多线程技术,那为何还把Service单独列成一个组件呢?当Activity调用onStop不可见时,其中的线程是否还在继续运行?** ## 目录 * [Service 和 Activity 的区别](#service-和-activity-的区别) * [Service 主要用于](#service-主要用于) * [Service 的三种启动方式](#service-的三种启动方式) * [Service 的线程级别](#service-的线程级别) * [Service 的生命周期](#service-的生命周期) ### Service 和 Activity 的区别 * 当Activity不可见或者被销毁,其中比如网络请求,数据库操作等线程就会成为背景线程,随时可能牺牲(在内存不足时被虚拟机回收) * Service没有UI交互,所以它一直在后台,同时被操作系统赋予较高的线程优先级。换句话说:在内存不足的情况下,系统会杀死背景线程来维持Service的运转。 情况下,系统会杀死背景线程来维持Service的运转。 ### Service 主要用于 * 下载文件 * 后台播放音乐 * IM应用中与BroadCast提供消息监听 ### Service 的三种启动方式 * 在Activity使用 StartService * 设置启动时间 * bind ### Service 的线程级别 * 很多开发者所不知道的是,Android框架中的四大组件都运行于同...
海象先生 发布于 16小时前 阅读 294

微信小程序 Node.js (基础六) Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。  但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
第九程序 发布于 3周前 阅读 861 评论 5

关于线程,还有这些是你需要知道的!

在日常开发中,线程常常被用作为提升程序效率的重要手段。在CoorChice的这篇文章中,CoorChice介绍了线程的基本运作。
CoorChice 发布于 3周前 阅读 3538 评论 25 点赞 17

Android智能下拉刷新框架-SmartRefreshLayout

框架?下拉刷新控件还能框架化?智能?啥玩意来着?
树朾 发布于 3周前 阅读 1317 点赞 1

iOS:使用minimumScaleFactor控制字体大小自适应

  曾经可以直接设置最小字体大小,后该方法被移除只能使用minimumScaleFactor。 刚开始学习的朋友可能会发现设置minimumScaleFactor后并不起作用,实际上还需要再设计label的adjustsFontSizeToFitWidth才可以起作用 title.minimumScaleFactor = 0.1;   title.adjustsFontSizeToFitWidth = YES;    
壹峰 发布于 6天前 阅读 30

微信小程序中多个button/view组件中进行切换时改变样式

微信小程序中多个button/view组件中进行切换时改变样式开发具体教程
第九程序 发布于 7天前 阅读 26

给 Web 开发人员推荐的开源图形库 —— 2D/3D

现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高,数据可视化、动画交互、2D/3D 等元素已然成为标配。 以下是为 Web 开发者推荐的一些精品开源图形库,旨在专注于最常见的问题和最常用的东西。将针对动画(Animation)、数据可视化(Data Visualization)、2D/3D 分别整理,欢迎保持关注。 给 Web 开发人员推荐的开源图形库 —— 动画 2D 一、绘图渲染 1、图形 PixiJS 一个 HTML5 构建引擎,用最快、最灵活的 2D WebGL 渲染器创建漂亮的数字化内容。旨在提供一个可以在所有设备上运行的快速轻量级 2D 库,帮助你创建丰富的交互式图形、跨平台应用和游戏,而无需深入到 WebGL API 或处理浏览器和设备的兼容性。 效果预览:点此查看 Fabric.js 一个可以轻松使用 HTML5 canvas 元素的库,在 Canvas 元素之上提供交互对象模型,同时还包含 SVG-to-canvas 解析器。它可以帮助你在画布上创建和填充对象,从简单的几何图形到成百上千路径组成的复杂图形。你可以通过鼠标轻松的移动、缩放和旋转这些对象,修改它们的属性(颜色、透明度,层叠顺序)等等。 效果预览:点此查看 2、立体像素 Obelisk.js 这是一个构建等距立体像素对象的 JavaScript 库,通过提...
编辑部的故事 发布于 4天前 阅读 4737 评论 16 点赞 17

开源Android容器化框架Atlas开发者指南

课程概览 课时列表 评价 笔记   课时1:Atlas项目介绍 07:37 课时2:基础知识储备 07:05 课时3:Atlas demo工程介绍08:17 课时4:构建与基线发布10:12 课时5:动态部署、远程bundle、单模块部署演示14:25 课时6:Atlas原理简单介绍06:34 课时7:【课程讲义】Atlas框架介绍
乱蓬头 发布于 5天前 阅读 19

webView 加载本地文件ERROR_MESSAGE_MAIN ERROR_MESSAGE_REASON错误提示

     当时遇到这个错误我内心是崩溃的,查询搜索各大网页基本上都找不到webView提示这条错误,       报这个错误主要是我在做下载功能的时候,后台给我的文件类型doc,docx为一个type,所以我下载保存文件的时候直接存的.doc,导致本来是docx文档打开就提示这个错误。
YOrange 发布于 2个月前 阅读 409

百度语音使用

http://www.devstore.cn/evaluation/testInfo/107-204.html
_____1____ 发布于 5天前 阅读 21

ReactiveCocoa源码解读(二)

上一篇解读了`ReactiveCocoa`的三个重要的类的底层实现,本篇继续。 ## 一、RACMulticastConnection #### 1.应用 `RACMulticastConnection`: 用于当一个信号被多次订阅时,为了保证创建信号时,避免多次调用创建信号的block造成副作用,可以使用该类处理,保证创建信号的block执行一次。 ``` // 创建信号 RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) { NSLog(@"发送请求"); [subscriber sendNext:@1]; return nil; }]; // 创建连接 RACMulticastConnection *connect = [signal publish]; // 订阅连接的信号 [connect.signal subscribeNext:^(id x) { NSLog(@"connect 第一次订阅信号: %@", x); }]; [connect.signal subscribeNext:^(id x) { NSLog(@"connect 第二次订阅信号: %@", x); }]; // 连接 [connect connect]; ``` #### 2.源码实现 * 底层原理 ``` 1.创建connect,connect.sourceSignal -> RACSignal(原始信号) connect.signal -> RACSubject 2.订阅connect.signal,会调用RACSubject的subscribeNext,创建订阅者,而且把订阅者保存起来,不会执行block。 3.[connect connect]内部会订阅RACSignal(原始信号),并且订阅者是RAC...
飞鱼湾 发布于 5天前 阅读 16

仿支付宝首页下拉刷新

**声明:转载请注明本文地址** ---------- ## DEMO相关 [APK下载地址](https://fir.im/ckh1) https://fir.im/ckh1 [Github源码,欢迎大家指正,以及star,谢谢](https://github.com/JmStefanAndroid/EasyBehavior) https://github.com/JmStefanAndroid/EasyBehavior ---------- 题外话 -- 学习了Behavior之后,发现效果都可以通过Behavior来实现,包括支付宝首页的下拉刷新效果,其重点效果指标在于下滑上部分的布局,同样能够进行下拉刷新,其下拉刷新的布局展开的位置在中间部分,这篇文章将会讲讲如何实现这个效果的,目前这个效果还不是很完善,但相信通过不断的迭代和矫正能够达到完美,可以先看下效果吧。 ![这里写图片描述](http://img.blog.csdn.net/20170711122151166?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2ptMTU4ODExMzM4MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) PS:得益于各位在我的github上对[EasyBehavior](https://github.com/JmStefanAndroid/EasyBehavior)提出的指正,目前第一个demo的效果已经比较好用了,这个仿支付宝的效果也是放在[EasyBehavior](https://github.com/JmStefanAndroid/EasyBehav...
stefanever 发布于 5天前 阅读 18 评论 1

iOS之UIWebView无法获取web标题

最近遇到了一个问题,就是在`UIWebView`的代理方法里,执行`document.title`的`js`代码无法获取网页标题,代码如下: ``` - (void)webViewDidFinishLoad:(UIWebView *)webView { // 取加载html文件的标题名 NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; } ``` 出现这个问题,我首先确定是不是代码的问题,经过分析,发现代码没有改动,但这次却无法获取网页标题,甚是奇怪。经过查找分析,问题是在这一版中,前端人员把网页的标题设置放在了异步操作里,导致`UIWebView`在加载网页完成后,在代理方法`webViewDidFinishLoad:`里无法立即获取标题,因为获取标题的方法是异步的,而网页加载完就会调用该代理方法,那时候的网页`title`还没有值,所以获取不到`title`的值。 下面是网页异步获取`title`的代码,使用了`jQuery`和`Ajax`技术来异步获取`title`: ``` $.ajax({ url: remoteur+'/api/innerMessageApi/noticeMessage.htm?callBackFunc=xx', type: 'get', dataType: 'jsonp', jsonpCallback:"xx", data: {msgId: msgId}, success: function(res){ console.log(res); if ( res.successFlag == 'Y' ){ content = res.conten...
飞鱼湾 发布于 16小时前 阅读 13

Android热更新框架Tinker无法更新?

今天,像往常一样,打开Android Studio打包项目,发现Gradle 编译报错 ``` Failed to resolve: annotationProcessor Failed to resolve: com.tencent.tinker:tinker-patch-gradle-plugin:1.7.11 ``` 而前几天编译一切正常,检查gradle一切正常;接着检查发现 tinkerPatchDebug 命令找不到了,然后去了 jcenter 仓库查看,发现 tinker 包已经不见了 地址如下:http://jcenter.bintray.com/com/tencent/tinker/ 究竟是何原因暂时还不知道,不过 tinker 如此大的用户量,影响太大了
iBaoger 发布于 5天前 阅读 20

你知道Thread线程是如何运作的吗?

我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
CoorChice 发布于 1个月前 阅读 4509 评论 26 点赞 17

微信H5支付接口开发步骤

接口流程图 1、用户在商户侧完成下单,使用微信支付进行支付 2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页 4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文) 5、如支付成功,商户后台会接收到微信侧的异步通知 6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面) 7、商户在展示页面,引导用户主动发起支付结果的查询 8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态 10、展示最终的订单支付结果给用户 常见问题 一、回调页面 正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。 如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理: 假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package...
移动支付 发布于 2个月前 阅读 130

Android自动化构建

first initial
茶码古道 发布于 6天前 阅读 12

android模块化开发之aar——本地文件引用

如果你知道aar文件是个什么东西,直接切到“如何引用”吧~~~ ### 什么是aar文件: **官方**解释: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05105120_2fYT.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201707/05104445_TSH1.png "在这里输入图片标题") 我来总结一下: aar首先它是一个后缀为.aar的文件,然后这个文件是在android项目里面使用的,它是一个android库文件,然后它比我们之前使用的.jar文件更强大!!!over~ ###如何生成: 首先得创建一个库,继续官方文档走起: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05110503_9XmH.png "在这里输入图片标题") example: ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111002_PZjX.png "在这里输入图片标题") ![选择"Android Library"](https://static.oschina.net/uploads/img/201707/05111033_Kx6r.png "Android Library") **Next**一直到**finish**一个module就创建好了~ ![输入图片说明](https://static.oschina.net/uploads/img/201707/05111241_6Fnd.png "在这里输入图片标题") > 接下来我在新建的aarlibr...
veidy 发布于 3周前 阅读 324

随处可见的用户体验

用户体验这个词,最近几年被广泛的提起,甚至将其视为互联网产品赢得市场的最关键因素。但它,其实早就出现在我们的生活中了。
恒生开发者社区 发布于 3个月前 阅读 20

OC 五大内存区域

这篇文章写的很好: http://www.cnblogs.com/ljx-xinge/p/31-OC-te-xing-zhi-nei-cun-wu-da-qu-yu.html#toc_23
王素年 发布于 5天前 阅读 9

一个 jpg 在Android中所占用的内存大小

在 Android 中一个 jpg 文件按会占用多大的内存空间呢,这里尝试着找了一个公式
刘yan 发布于 54分钟前 阅读 1

C++:第三课

处理数据 内置的C++类型分为两组:基本类型和复合类型; 基本类型是整数和浮点数;复合类型包括数组,字符串,指针和结构; 简单变量 程序需要存储信息,为了把信息存储到计算机,程序必须记录3个基本属性; ①信息将存储在哪里 ②存储的值是多少 ③存储何种类型的信息 变量名 ①只能使用数字,字母和下划线 ②第一个字符不能是数字 ③区分大小写 ④不能将关键字作为名字 ⑤C++对名称的长度没哟限制,但是平台对长度有限制 整型 整数,就是指没有小数的数字; 不同C++整型使用不同的内存来存储整数;使用的内存量越大,表示的数值范围就越大;另外,有的类型可表示正值和负值(有符号的整型),有的类型不能表示负值(无符号);宽度width用于描述存储整数时使用的内存量;使用的内存越多就越宽; C++的基本整型分别是char,short,int,long,以及long long,每种类型都有符号版和无符号版本,因此,共有10种类型可供选择; 计算机内存由一些叫做位(bit)的单元组成,C++中的short,int,long和long long 通过不同数目的位来储存,最多能够表示4种不同的整数宽度; C++提供了一种灵活的标准,它确保了每种类型的最小长度,即: ①short最少是16位; ②int至少与short一样长; ...
果果君 发布于 2小时前 阅读 1

C++:第二课

语句和分号 语句是要执行的操作; 编译器需要知道一条语句何时结束,下条语句何时开始;C++使用了终止符,即分号,它是语句的结束标志,是语句组成的一部分,而不是语句之间 的标记,所以,在C++中不可以省略分号; 在C++的函数中,让函数的方法参数空着,与在空号中使用void等效; 预处理器 在程序进行编译之前对源文件进行处理,即处理名称以#开头的编译指令; 预处理器是将头文件中的内容加载到源文件中,在源代码被编译之前,替换或者添加文本; #include是一个编译指令,它将头文件中和源代码的内容一起发送至编译器,实际上,头文件中的内容会替代程序中的#include xxx代码; 原始文件没有被修改,而是将原始文件和头文件组合成一个复合文件,编译的下阶段将会使用该文件; 头文件 头文件也叫包含文件,由于他们被包含在其他文件中; C和C++,对于头文件都有不同的扩展名;由于C的扩展名太多,后来一直同意,C++不使用任何扩展名 名称空间 如果使用iostream,而不是iostream.h,则应使用名称空间编译指令来使iostream中的定义对程序可用; using namespace std; 这叫做using编译指令;名称空间类似于java中的类的概念,比如A类和B类有同一个方法method,那我如果调用A...
果果君 发布于 2小时前

C++:第一课

C++是什么? C++继承了C语言高校,简洁,快速和可移植性的传统,在C语言的基础上添加了对面向对象编程和泛型编程的支持。 C++融合了三种不同的编程方式,即面向对象,泛型和C语言代表的过程性语言; 为什么要使用C++? 为什么会出现C语言? C语言的出现,是为了开发UNIX操作系统,因为它要求开发这门操作系统的语言必须简洁,能够生成简洁、快速的程序,并能够有效的控制硬件; 传统上,程序员会选择汇编语言来满足这些需求,汇编语言是依赖于计算机的内部语言;汇编语言是低级语言,它是直接操作计算机硬件的,如直接访问计算机的CPU寄存器和内存单元; 因此汇编语言针对于特定的计算机处理器,要将汇编程序移植到另一台计算机上,必须使用不同的汇编的语言重新编写程序; 而UNIX是为了在不同的计算机上工作而设计的,这意味着它是一门高级语言;高级语言针对于解决问题,而不是针对于特定硬件; 一种被称为编辑器的特殊程序将高级语言翻译成特定的计算机内部语言,这样,就可以对每个平台使用不同的编译器来在不同的平台上使用同一个高级语言程序; C语言:将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起; C语言是什么? C语言是过程性语言,意味...
果果君 发布于 2小时前

iOS使用UITableView实现的富文本编辑器

iOS使用UITableView实现的富文本编辑器
aron1992 发布于 3小时前 阅读 1

android 修改avd路径

修改后需要重新创建新的avd
yizhichao 发布于 5小时前 阅读 1

第二课

运算符重载 通过重载,同一个运算符在不同的地方有不同的含义,编译器通过上下文来确定该运算符的含义; cout是一个对象,它表示标准输出流;<<表示将一个字符串插入到输出流中; endl 控制符,它表示重起一行;在输出流中插入endl,光标会跳转到下一行开头; 诸于endl等对于cout来说有特殊含义的符号被称为控制符,它也是在iostream中定义的,命名空间为std; 源代码的格式化 在C++中,回车的作用和空格以及制表符的作用相同; 在C++中,不能把回车用在字符串中间; C++语句 声明语句提供变量,而赋值语句是给变量赋值; 为什么要声明变量? 要将信息存储在计算机中,必须指出信息的存储位置和所需的内存空间; 声明变量,是为了指出存储类型并提供位置标签,给不同存储类型的变量预留空间; int a ;该条语句提供了两条信息,需要的内存,以及内存单元的名称; 所以该语句有如下分析: 1.程序需要足够的内存空间来存储一个整数;编译器负责分配和标记内存的细节; 2.给存储单元指定名称;该语句指出,此后使用a表示存储在该内存单元的值,注意,这里的a表示的是值,不是地址;a被称为变量,因为它的值可以被修改; C++中,声明语句可以在任意位置,这点和java一样; 一旦...
果果君 发布于 6小时前

手把手教你使用pdf密码移除器

       在生活工作中,大家为了保护PDF文件,在文件里加上密码这是比较常见的。不过有很多人还不知道怎么样去解除密码,这样下载下来的文件,则会花费很多时间才能进行编辑、修改。那么有什么PDF密码移除器,或者在线移除网站吗?下面就跟大家伙来接一个简单有效的方法,让我们一起来学习下吧!       PDF密码移除器http://www.onlinedown.net/soft/968680.htm​ 是一款优秀的PDF密码移除工具。使用它,您可以轻松的移除PDF用户和所有者密码,解除由于PDF加密而导致的打印、复制和编辑的限制。为了节约你的时间,该软件还支持批量移除PDF文件密码。     可能看起来比较简单。让我们再一次的详细的介绍一下:     1、我们将这款迅捷pdf密码移除器下载到电脑上,在安装界面选择好软件安装的所需路径,点击开始安装将软件安装到电脑中。     2、软件安装完成后打开软件并进入软件的主界面,我们可以软件的左侧会有一些软件的功能,我们在软件功能种找到我们所需要的“pdf文件解密”功能键。     3、设置路径,文件列表上方有PDF文本存放路径选项:保存在原文件夹内和自定义文件夹,也可以点击“浏览”按键来设置其他存放路径,一切根据大家需要来选定...
dayu444 发布于 6小时前 阅读 1

linux Memory 快照

linux 内存快照
貌似高手 发布于 7小时前

Python-requests网络库详解

layout: default title:Python-requests网络库详解 date: 2017-07-24 16:34:00 tags: --- # Python-requests网络库详解 Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求.Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner. ###requests安装 通过pip安装 ``` pip install requests ``` 源码安装 ``` $ git clone git://github.com/kennethreitz/requests.git $ cd requests $ python setup.py install ``` 简单get请求 ``` import requests import json r = requests.get('http://www.baidu.com') print r.status_code # 状态码 print r.text # text格式 con = r.content #内容这里返回的是html标签 ``` POST请求 ``` # 把参数名和值已键值对的方式 放到字典里面 payload = dict(key1='value1', key2='value2') r = requests.post('http://httpbin.org/post', data=payload) #也可以以json格式上传 r = requests.post('https:www.baidu.com, data=json.dumps({'some': 'data'})) print(r.text) { ... "form": { "key2": "value2",...
她吃西红柿 发布于 7小时前 阅读 2

记录全部log

anroid monitor 输出内容全部打印
cicue 发布于 7小时前 阅读 2

SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例

“活动”是ThinkSNS V4版本内的一个应用,具有PC端、iOS APP端、Android APP端。看名字应该就能够看出来,功能就是用于举办各种活动,不管是旅游、比赛、聚会、交友都可以使用的一个功能。
ThinkSNS账号 发布于 8小时前 阅读 1

Timer源码剖析

1、Timer概述 Timer类我们通常用来执行延迟、定时任务,与其密切相关的类有TimerTask、TaskQueue、TimerThread。与Android的消息机制类似,timer.schedule()不断的将任务扔到TaskQueue中,TimerThread用于不断的循环任务队列执行任务。 人傻话少,裁剪别人写的。 2、任务的执行顺序是否和代码中写的一致? private void sched(TimerTask task, long time, long period) { if (time < 0) throw new IllegalArgumentException("Illegal execution time."); if (Math.abs(period) > (Long.MAX_VALUE >> 1)) period >>= 1; synchronized (queue) { if (!thread.newTasksMayBeScheduled)              throw new IllegalStateException("Timer already cancelled."); synchronized (task.lock) { if (task.state != TimerTask.VIRGIN) throw new IllegalStateException("Task already scheduled or cancelled"); task.nextExecutionTime = time; task.period = period; task.state = TimerTask.SCHEDULED; } queue.add(task); if (queue.ge...
t_yapeng 发布于 8小时前 阅读 4

Android 桌面加载图标流程

### 桌面应用图标流程(Android 5.1 桌面源代码) #### 目的 本文的目的是介绍桌面加载图标的流程,介绍与桌面图标相关的组件。通过讲解掌握应用图标在桌面上显示的过程,为之后介绍滤镜集成方案做准备。 #### 桌面组件介绍 - 下面来看一张图 - 一级菜单 - **WorkSpace**:他是一个ViewGroup,要想在桌面上显示东西,就得往这个ViewGroup里添加自己的View - **BubbleTextView**:他是一个TextView,上方是图标,下方是名称,在桌面上的图标都是由这个类表示 - **FolderIcon**:他也是一个ViewGroup,用来表示桌面上的文件夹图标,里面添加了缩略处理过的bitmap,他的背景图片就是文件夹的形状 - **HotSeat**: 他是个FrameLayout,是桌面下方的固定快捷区,包含了几个常用的图标,中间的AllApp按钮是固定位置,也是一个TextView - 抽屉页面 组件 - **PagedView**:他是一个viewgroup,代表进入抽屉页后的界面,应用图标需要添加到这个viewgoup里面才能显示,一个或几个PagedView 承载了手机上所有的应用图标 - **PagedViewIcon**:他是一个TextView,和BubblTextView一样,只是在抽屉容器里换了个名字 ####桌面加载图标流程 - 桌面Activity 也就是Launcher.java 类,该类里...
一只教兽丶 发布于 8小时前 阅读 1

URL的组成

介绍下普通URL的各部分组成 http://www.xxx.com:8088/yyy/index.html?index=5&id=24618&page=1#name 一个完整的URL包括以下几部分: 1.协议部分:此URL的协议为“http:”,表示网页使用HTTP协议。 2.域名部分:该URL的域名部分为“www.xxx.com”。同时IP地址也可以作为域名使用 3.端口部分:跟在域名后面的8088为端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,端口部分省略后,将采用服务器配置的默认端口。 4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/yyy/” 5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.html”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名 6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分 7.参数部分:从“?”开始到“#”为止之间...
i磊哥 发布于 9小时前 阅读 3

页面结构化在 Android 上的尝试

本文来自于**腾讯Bugly**公众号(**weixinBugly**),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/M45DM5Ix7a2fmrsE8VPvxg 作者:bizaitan >**导语**:MVP开发模式可以帮助项目结构解耦,但其庞大的方法数增加,较为笨重设计对于手Q项目并不很适合。参考之前Web开发经验,提出以页面结构化的解耦方式组织代码。下面讲讲Lego在Android上一次小小尝试 ## 一,MVP简介 ![](http://oa5504rxk.bkt.clouddn.com/week53_YMH/1.png) MVC太过常见这里不啰嗦。实际应用MVC当中,Activity占据打部分的工作,View和Controller的身份分不清。而MVP则是一种设计模式专门优化Activity / Fragment。 先来看看MVP模式的核心思想:**View不直接与Model交互** >MVP 把 Activity 中的 UI 逻辑抽象成 View 接口,把业务逻辑抽象成 Presenter 接口,Model 类还是原来的 Model 在MVP设计模式中, - **View**:由Activity充当,并且响应生命周期 - **Model**:还是原来的数据层,网络,缓存,解析等。 - **Presenter**:作为View和Model的中间纽带,View不能直接对Model进行操作,必须经过Presenter - **View interface**:需要View实现的接口,View通过View interface与Present...
腾讯Bugly 发布于 9小时前 阅读 1

【2017年最全】 iOS面试题及答案

设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。 1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。 2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。 3). 单例模式:通过static关键词,声明全局变量。在整个进程运行期间只会被赋值一次。 4). 观察者模式:KVO是典型的通知模式,观察某个属性的状态,状态发生变化时通知观察者。 5). 委托模式:代理+协议的组合。实现1对1的反向传值操作。 6). 工厂模式:通过一个类方法,批量的根据已有模板生产对象。 MVC 和 MVVM 的区别 1). MVVM是对胖模型进行的拆分,其本质是给控制器减负,将一些弱业务逻辑放到VM中去处理。 2). MVC是一切设计的基础,所有新的设计模式都是基于MVC进行的改进。 #import跟 #include 有什么区别,@class呢,#import<> 跟 #import””有什么区别? 答: 1). #import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入。 2). @class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解...
Jack088 发布于 9小时前 阅读 4

最新iOS发布App Store详细图文教程

最新iOS发布App Store详细图文教程 https://mp.weixin.qq.com/s/nupbzALXA7916dbH4zuKIw
Jack088 发布于 9小时前

未学者(wo)一步一步从ionic2学习到AngularJs(三)

http://www.imooc.com/article/15995?block_id=tuijian_wz
yizhichao 发布于 9小时前 阅读 1

自己动手设计一款iOS自动构建发布工具

在iOS开发中,开发者经常会需要打各种各样的软件包。有些提交测试,有些提交appstore,还有些可能要提交第三方平台。一款全自动的打包发布工具可以帮助我们事半功倍的完成这些工作。
珲少 发布于 10小时前 阅读 5

【福利】蓝色巨人的云计算PaaS平台IBM Bluemix免费试用!

IBM Bluemix,包含认知、物联网、大数据分析、安全、DevOps、应用、应用整合、移动、计算、网络、存储等 11 大类共 140 多个服务的云计算平台。
IBM Bluemix

关于线程,还有这些是你需要知道的!

在日常开发中,线程常常被用作为提升程序效率的重要手段。在CoorChice的这篇文章中,CoorChice介绍了线程的基本运作。
CoorChice 发布于 3周前 阅读 3538 评论 25 点赞 17

Android基于UPnP/DLNA的智能设备媒体互联

有趣的 在一个项目工作中偶然接触到 UPnP -- 一个基于本地网络的即插即用设备互联协议标准,后来经了解发现 UPnP 是个很有趣的东西。这个协议有一些特性(详细信息可参考官方资料 http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf) ⦁ 对等,没有主次 所有 UPnP 网络中的设备及可以提供服务,也可以主动发起数据传输,设备的角色取决于软件(不像 USB 协议那样的主从模式)。如果一个设备实现了 AVTransport 那么它可以提供媒体渲染服务,例如一台智能电视;如果设备实现了 ContentDirectory 那么它可以提供流媒体服务,例如开启媒体流的功能的 PC;如果设备是使用 ControlPoint 那么它就像是个智能遥控器,例如安装一些 DLNA 控制软件的手机;一台设备可以同时支持多个服务,例如Windows Media Player它即可以接受渲染推送来的媒体,也可以吧媒体推送到其他设备上播放(Play To)。UPnP网络中的设备没有一个Master,所有设备都是对等。 ⦁ 即插即用,零配置 这个即插即用不是硬件层面的(不像USB那样的串行总线设备拓展),而是通过本地网络实现。设备可以动态加入网络(通过SSDP发现设备),传达其功能(使用XML描述),并了解其他设备的存在和功能。...
KnightMobi 发布于 4周前 阅读 1208 评论 2 点赞 4

你知道Thread线程是如何运作的吗?

我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
CoorChice 发布于 1个月前 阅读 4509 评论 26 点赞 17

使用MediaCodec和RTMP做直播推流

本项目完全开源 项目Github地址:[AndroidInstantVideo](https://github.com/ChillingVan/AndroidInstantVideo) 码云地址:[AndroidInstantVideo](http://git.oschina.net/ChillingVan/AndroidInstantVideo) 目前开源的项目或市面上的Android直播客户端主要是用ffmpeg来实现推流的。本文将介绍使用Android原生的视频编码类MediaCodec实现直播推流。 ### 数据流及大致原理 这里所说的直播,就是将你的客户端产生的视频数据,实时发送到服务器上。服务器上的数据再实时地发送到播放客户端上。 * 以视频数据为例: **获取Camera画面** 首先是摄像头拍摄得到原始画面数据,这里原始画面数据的格式我们不用管,因为我们使用的是MediaCodec,所以我们会使用 camera.setPreviewTexture(surfaceTexture) 来利用Camera获取到的画面。 此处的原理可忽略,大致说明的话,就是Camera会把获得的画面保存为OpenGL的一个纹理,我们使用这个纹理就能使用Camera的画面。 **绘制画面** 在获得画面之后,我们要把这个画面(纹理)“画”到MediaCodec上。 如何画? MediaCodec提供一张’白纸’,也就是一个Surface,供我们把纹理画到上面。此处的API是 MediaCodec.createInputSurface() 怎么画?...
量子 发布于 1个月前 阅读 2257 评论 21 点赞 5

OC对象之旅 weak弱引用实现分析

# Runtime学习 -- `weak`应用源码学习 >   Runtime源码分析,带你了解OC实现过程。其中参考了大量的大神的代码以及文献,里面也有个人的见解,欢迎拍砖,欢迎交流。 ## 两种常见使用场景 ```Objective-C /// weak属性 @interface XX : XX @property(nonatomic,weak) Type* weakPtr; @end /// 代码块中使用 { /// 使用__weak __weak Type* weakPtr = [[SomeObject alloc] init]; } ``` 根据调试信息,发现两者的区别是: - 第一种进入到 `id objc_storeWeak(id *location, id newObj)方法` ``` /** * This function stores a new value into a __weak variable. It would * be used anywhere a __weak variable is the target of an assignment. * * @param location The address of the weak pointer itself * @param newObj The new object this weak ptr should now point to * * @return \e newObj */ id objc_storeWeak(id *location, id newObj) { return storeWeak (location, (objc_object *)newObj); } ``` - 第二种绕一个远路,先初始化 `id objc_initWeak(id *location, id newObj)` ``` Objective-C /** * Initialize a fresh weak pointer to some object l...
瞎折腾 发布于 1个月前 阅读 707

用两张图告诉你,为什么你的App会卡顿?

![Cover](http://upload-images.jianshu.io/upload_images/1869462-e45f4cf10981b323.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 有什么料? 从这篇文章中你能获得这些料: - 知道setContentView()之后发生了什么? - 知道Android究竟是如何在屏幕上显示我们期望的画面的? - 对Android的视图架构有整体把握。 - 学会从根源处分析画面卡顿的原因。 - 掌握如何编写一个流畅的App的技巧。 - 从源码中学习Android的细想。 - 收获两张自制图,帮助你理解Android的视图架构。 ![link](http://upload-images.jianshu.io/upload_images/1869462-59ab533d5276864e.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 从setContentView()说起 ``` public class AnalyzeViewFrameworkActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_analyze_view_framwork); } } ``` 上面这段代码想必Androider们大都已经不能再熟悉的更多了。但是你知道这样写了之后发生什么了吗?这个布局到底被添加到哪了?我的天,知识点来了! 可能很多同学也知...
CoorChice 发布于 2个月前 阅读 5151 评论 44 点赞 25 打赏 1

Android 的滑动分析以及各种实现

一、滑动效果的产生     滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从而实现View跟随用户触摸的滑动而滑动。 (1)、Android的坐标系         Android中将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如下图:          系统提供了getLocationOnScreen(int location[])这样的方法来获取Android坐标系中点的位置,即该视图左上角在Android坐标系中的坐标。在触控事件中使用getRawX()、getRawY()方法所获得的坐标同样是Android坐标系中的坐标。  (2)、视图坐标系     Android中除了上面所说的这种坐标系之外,还有一个视图坐标系,它描述了子视图在父视图中的位置关系。这两种坐标系并不矛盾也不复杂,他们的作用是相互相成的。与Android坐标系类似,视图坐标系同样是以原点向右为X轴正方向,以原点向下为Y轴正方向,只不过在视图坐标系中,原点不再是Android坐标系中的屏幕最左上角,而是以父视图左上角为坐标原点,如下图:     在触控...
MrXI 发布于 3个月前 阅读 1612 评论 7 点赞 3

Android基础夯实--你了解Handler有多少?

万丈高楼平地起,学习任何东西我们都离不开扎实的基础知识。本编文章通过对Handler相关知识的全面回顾,给Android开发者重新夯实基础。
Ryane 发布于 4个月前 阅读 1949 评论 8 点赞 2

Service Worker:让网页无网络也能访问

想要开发一个 PWA(Progressive Web App)应用,你必须知道首先知道,Service Worker 是什么,他是怎么工作的。
kymjs张涛 发布于 5个月前 阅读 2782 评论 7 点赞 2

UICollectionView详解

标准的UICollectionView包含三个部分,它们都是UIView的子类: Cells 用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容,这个稍后再说 Supplementary Views 追加视图 如果你对UITableView比较熟悉的话,可以理解为每个Section的Header或者Footer,用来标记每个section的view Decoration Views 装饰视图 这是每个section的背景 UICollectionViewDataSource(与数据相关) section的数量 -numberOfSectionsInCollection: 某个section里有多少个item -collectionView: numberOfItemsInSection: 对于某个位置应该显示什么样的cell -collectionView: cellForItemAtIndexPath: Supplementary View的方法(section头部视图,section尾部视图) collectionView: viewForSupplementaryElementOfKind: atIndexPath: UICollectionViewDelegate(与数据无关) 关于用户交互,UICollectionView也做了改进。每个cell现在有独立的高亮事件和选中事件的delegate,用户点击cell的时候,现在会按照以下流程向delegate进行询问: -collectionView:shouldHighlightItemAtIndexPath: 是否应该高亮? -collectionView:didHighlightItemAtIndexPath: 如果1返回结果为是,那么高亮 -c...
业界小白 发布于 5个月前 阅读 1104 评论 1 点赞 1

iOS中ImageIO框架详解与应用分析

ImageIO框架提供了读取与写入图片数据的基本方法,通过它可以实现对图片数据的深入分析与内容修改。
珲少 发布于 5个月前 阅读 1496 评论 4

小程序如约而至,微信小程序玩法大起底!!

博卡君的小程序使用教程
博卡君 发布于 6个月前 阅读 7174 评论 10 点赞 5

Lua与ObjC的交互

在这里,我想跟大家分享另外一种脚本语言的交互方式,就是使用Lua与原生的ObjC语言进行交互。
vimfung 发布于 7个月前 阅读 2040 评论 7

手把手教你, Jenkins构建iOS项目

Jenkins构建iOS项目 自动拉取GitHub/SVN 上传到fir/蒲公英
她吃西红柿 发布于 8个月前 阅读 2996 评论 7 点赞 6

自己动手实现Android App插件化

Android插件化目前国内已经有很多开源的工程了,不过如果不实际开发一遍,很难掌握的很好。 下面是自己从0开始,结合目前开源的项目和博客,动手开发插件化方案。 按照需要插件化主要解决下面的几种问题: 1. 代码的加载 (1) 要解决纯Java代码的加载 (2) Android组件加载,如Activity、Service、Broadcast Receiver、ContentProvider,因为它们是有生命周期的,所以要特殊处理 (3) Android JNI代码的加载 (4) Android 特殊控件的处理,如Notification等 2. 资源加载 不同插件的资源如何管理,是公用一套还是插件独立管理? 因为在Android中访问资源,都是通过R. 实现的,   下面就一步步解决上面的问题 1. 纯Java代码的加载 主要就是通过ClassLoader、更改DexElements将插件的路径添加到原来的数组中。 详细的分析可以参考我转载的一篇文章,因为感觉原贴命名和结构有点乱,所以转载记录下。 https://my.oschina.net/android520/blog/794715 Android提供DexClassLoader和PathClassLoader,都继承BaseDexClassLoader,只是构造方法的参数不一样,即optdex的路径不一样,源码如下 // DexClassLoader.java public class DexClassLoader extends BaseDexClassLoader { pu...
xingjm8511 发布于 8个月前 阅读 3092 评论 2 点赞 7

使用原生JS封装Tap事件,解决移动端300ms延迟

为了防止误操作,移动端iOS操作系统针对原生click事件做了300ms的延迟,这在一定程度上影响了我们的使用体验。 GitHub项目地址:https://github.com/SimonZhangITer/MyTapEvent FastClick 现在有现成的插件fastclick可以解决这个问题,但是也有弊端: GitHub上最新版本的插件大小为25.4kb,轻量为趋势,能省则省。 它的核心思想是取消默认的click时间,判断当前dom节点的类型进行相应的操作,这个判断过程较为繁琐。 MyTapEvent 本人最近在做微信项目,由于fastclick插件存在一定弊端,因此开发了一个简单的tap事件,主要思想有以下几点: Thinking 一次tap事件包含touchstart和touchmove(轻微移动)以及touchend三种状态 callback方法在touchend后执行 根据chrome浏览器默认的判断取消点击的移动量,手指偏移量(水平或垂直)超过15px则判定为滚动,取消执行tap事件 手指按下时间过长不视为点击,默认时间间隔为500ms 使用HTMLElement来扩充原型,方便添加Event 使用单例模式,确保只加载一次 ok,思想定下来,代码写起来就清晰多了: if (!HTMLElement.prototype.addTapEvent) { HTMLElement.prototype.addTapEvent = function(callback) { var tapStartTime ...
Simon_ITer 发布于 8个月前 阅读 2400 评论 6 点赞 2

iOS开发CoreGraphics核心图形框架之六——梯度渐变

开发中有时会使用梯度渐变视图,在CoreGraphics框架中,提供了这个类型来创建梯度渐变:CGShadingRef与CGGradientRef。
珲少 发布于 8个月前 阅读 1101 评论 4 点赞 3

Ionic2:创建App启动页滑动欢迎界面

每个有逼格的App在第一次启动时都有一个欢迎界面,通常是几个单页面或者带动画的单页面滑动到最后一页有个启动的按钮,本文将使用Ionic2来创建,So easy!
_飞哥 发布于 9个月前 阅读 4188 评论 22 点赞 5

5款微信小程序开发工具使用报告,微信官方开发工具还有待提升

微信小程序已经内测有一段时间了,笔者本着好奇加学习的心态写了几个小demo,虽然在MINA框架上并没有遇到太多的坑,但官方开发工具实在不敢恭维。 - api提示不全,要一个个查api啊,写代码超级慢啊 - 很多必备的快捷键都没有,比如全选关键字、快速复制一行等等 - 颜色主题不能选?不喜欢白色风格怎么搞 - 没有插件 没有插件 没有插件 重要的事情说三遍 无奈笔者走上了尝试各种IDE的旅途,现在说一下笔者对于IDE的需求或者设想: - 轻量级:我不喜欢那种类似Eclipse的庞然大物,即使出现类似工具我也不会去使用,因为其中90%的功能都不会被用到。 - 可定制化的代码着色:代码着色是必备功能,如果支持颜色模板最好 - 准确的代码提示:这个太重要了,大家懂得 - 可调试:IDE可以进行调试或运行 - 实时预览界面:由于应用开发与网页不同,实时预览必须在程序运行时才会将动态数据加载到界面,这块我不抱太大希望 针对上面几个需求,笔者前后尝试了目前市面上支持小程序开发的工具,呕心沥血总结如下,以供大家参考。 ## 微信小程序官方开发工具 ![](http://upload-images.jianshu.io/upload_images/1846413-1588b61a769c9b16.gif?imageMogr2/auto-orient/strip) 注意,这个小...
memda 发布于 9个月前 阅读 5053 评论 13 点赞 7

深入理解gradle编译-Android基础篇

Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle一些常见问题进行一一介绍。
小米墨客 发布于 9个月前 阅读 3539 评论 7 点赞 12 打赏 1
顶部