开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

iOS 扩展性极强的波浪效果工具类

波浪式图,最好在用的时候加个随机数,这样不会就不至于这么死板了
LiYaoPeng 发布于 4天前 阅读 133 评论 3

可扩展的ToolBar

>toolBar很常用,所以做了个工具类扩展性很好 ![](http://upload-images.jianshu.io/upload_images/4185621-c360e3a12044bdf7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 基本介绍: **一、写了两个创建方法** ``` + (instancetype)toolBarViewWithFrame:(CGRect)frame andOptionStrArray:(NSArray *)optionStrArray; - (instancetype)initWithFrame:(CGRect)frame andOptionStrArray:(NSArray *)optionStrArray; ``` **二、其实你直接这样创建就会出来这种效果:** >![](http://upload-images.jianshu.io/upload_images/4185621-a7f7756c67557e9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) @implementation ViewController ``` - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor lightGrayColor]; //创建 self.toolBarView = [[PYToolBarView alloc]initWithFrame:CGRectMake(0, 2, self.view.frame.size.width, 30) andOptionStrArray:@[@"有",@"美",@"女"]]; //添加 [self.view addSubview:self.toolBarView]; } ``` **三、里面有很多属性可以设置下面来看看:** **1. 点击事件的回调** ``` /**item点...
LiYaoPeng 发布于 4天前 阅读 139

图片压缩处理的一个可行解决方法【OC】

图片处理 图片压缩
w_sen 发布于 4天前 阅读 248 点赞 1

swift GCD-定时器(DispatchSourceTimer)注册登陆组件封装

GCD定时器,计时器button 的封装
LiYaoPeng 发布于 4天前 阅读 56

如何区分开源许可证

### 区分方法 ``` let result = undefined; // WTFPL: DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE // CC0是来自CC的公开领域许可证 // https://creativecommons.org/publicdomain/zero/1.0/legalcode // 发布在Public Domain 即公开领域的知名软件有SQLite; if (我无所谓) { result = "WTFPL or CC0 or 公开领域"; return result; } if (修改源码后,需要采用同样的许可证) { if (新增代码需要采用相同或兼容的许可证) { //DMR: Digital Rights Management 的缩写,数字版权管理 if (禁止DRM,公布相关硬件) { result = "GPLv3许可证"; } else { result = "GPLv2许可证"; } } else { if (禁止DRM,公布相关硬件) { result = "LGPLv3许可证"; } else { result = "LGPLv2许可证 or MPL许可证(Mozilla Public License)"; } } } else { if (每一个修改过的文件,都必须包含版权说明和更改处) { result = "Apache License 2"; } else { if (可以采用版权拥有者的名字进行推广) { result = "BSD(2-clause) or MIT许可证"; // BSD(2-clause) 也叫 Simplified BSD License 和 FreeBSD License } else { result = "BSD(3-clause) "; } } } ``` ### 参考资料 https://opensource.org/l...
zcs0843021123 发布于 5天前 阅读 75 评论 2

Android 输入法详解

依然清晰的记得我是如何掉入输入法这个大坑的。 那是一个不错的天气,我们领导廖哥,让我改一个输入法的按键。
冰雪情缘l 发布于 2周前 阅读 408

Android WebView实现js与java交互

近来自己想做一个Hybrid APP,H5为主,java辅之,考虑用cordova,对其js与java交互原理甚感兴趣,于是,自己折腾了一番
BarZu 发布于 2周前 阅读 65

Xcode9 新特性 Safe Area Layout Guide

楼主已经把xcode升级到xcode9 beta,创建xib的时候报了`Safe Area Layout Guide before ios9.0`的错,由于项目最低支持iOS8,估计是又出了什么新特性,Google一下原因如下 苹果在iOS7中引入的Top Layout Guide和Bottom Layout Guide,这些布局指南在iOS 11中被弃用,取而代之的是Safe Area Layout Guide. #### Top and Bottom Layouts Guides 当一个viewcontroller 被嵌入到navigationcontroller and tab bar 中时,我们可以使用 Top Layout Guide和Bottom Layout Guide 让view根据上下锚点自适应内容 如图所示 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-001.png "在这里输入图片标题") #### Safe Area Layout Guide 在iOS11中苹果用单独的Safe Area属性代替了上面的属性.安全区域限制于顶部和底部的锚点如图 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-002.png "在这里输入图片标题") #### 解决 在xib属性中把`Safe Area Layout Guide`属性勾去掉 ![](https://ws2.sinaimg.cn/large/006tNc79gy1fj9pofhk1pj318k0fo773.jpg) 更多可参考[WWDC 2017 Session 412 Auto Layout Techniques in Interface Builder](https:/...
她吃西红柿 发布于 2周前 阅读 1503 点赞 1

支付宝小程序PHP全栈开发--前端样式的设计.acss样式详解

我们知道在web开发中样式是在css文件中规定的,叫做层叠样式表 (Cascading Style Sheets)。其实在APP中样式的约束也是使用css,在支付宝小程序中也是使用css不过文件的后缀是.acss而且对css3进行了扩充而已。
小程序社区 发布于 2周前 阅读 438

苹果电脑获取Android Studio的发布版SHA1和开发版SHA1

苹果电脑获取Android Studio的发布版SHA1和开发版SHA1,MAC OS 下使用Android Studio获取开发版和发布版SHA1证书,Android sudio 如何获取Sha1(调试版和发布版)
红角羚羊 发布于 3周前 阅读 128 点赞 1

Spring boot with Hive

spring boot 1.5.6 + hive 2.3.0 + hadoop 2.5.0 + hbase 1.3.1
neo-chen 发布于 3周前 阅读 102

React前后端同构防止重复渲染

首先解释React前后端同构、React首屏渲染的概念。然后通过这2个概念解决服务端渲染完成后浏览器端重复渲染的问题。
随风溜达的向日葵 发布于 1个月前 阅读 1643 评论 2 点赞 2

Android插件化突破应用市场无法上广告的问题

先简单的描述一下在广告方面遇到的问题. 开发一款App有了一定的用户量之后通常会想接入第三方广告来实现变现, 然而在很多市场不让这类带广告的App上架,除非接的是他们家的广告. 在这里我只能呵呵了.这点困难就想难倒我们. 那接下来ShowTime.怎么做呢? 没错,就是插件化. 以广点通广告为例 这里我使用的是360开源的[RePlugin](https://github.com/Qihoo360/RePlugin),具体介绍和使用方法请看官方文档. 一.[RePlugin插件接入指南](https://github.com/Qihoo360/RePlugin/wiki/%E6%8F%92%E4%BB%B6%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97) 第 1 步:添加 RePlugin Plugin Gradle 依赖 在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle 依赖: ``` buildscript { dependencies { classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.0' ... } } ``` 第 2 步:添加 RePlugin Plugin Library 依赖 在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖: ``` apply plugin: 'replugin-plugin-gradle' dependencies { compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.0' ... } `...
AndWong 发布于 1个月前 阅读 339 评论 3 点赞 2

入坑 Kotlin 开发前,这些项目能让你少走弯路

自 Google 在 I / O 2017 上宣布 Kotlin 成为 Android 官方支持开发语言后,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用,许多知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。 Kotlin “上位”已将近 100 天,不过目前相关的技术教程仍不算多。如果你正在考虑入坑 Kotlin ,不妨先看看下面这些使用 Kotlin 开发的开源项目,或许前人的经验能让你少走许多弯路。 1、Bandhook-Kotlin 这是一个完全用 Kotlin 语言编写的 Android 音乐应用,是 Play Store 中的 Bandhook 的 Kotlin 版本。目前支持连接到 LastFm 并检索一些音乐乐队,以及显示歌手详情。该项目旨在展示如何使用 Kotlin 完整的编写复杂(至少在架构中)项目。 2、Tachiyomi 一个主要使用 Kotlin 语言编写的  Android 开源漫画阅读器,目前仅发布了测试版本。支持在线、离线阅读,支持 MyAnimeList ,支持章节过滤和从上次阅读点恢复,支持图书管理,阅读器可配置。 3、Twidere-Android 一个 Material Design 风格,功能丰富的 Kotlin 版 Twitter 应用,适用于 Android 4.0+ 。内置夜间模式,支持多账号,支持上传照片和视频,并带有强大...
编辑部的故事 发布于 1个月前 阅读 3276 评论 4 点赞 6

kotlin协程简单封装,助你一臂之力

简述 经过两天的学习历程,看遍了国内的经典博客,也看完了官方的文档。下面推荐大家阅读 好的文章: 开始使用Kotlin协程 官方: kotlinx.coroutines 如果英文够好,推荐看官网的,例子比较全面。 本项目源码地址 计划 学习过后,为了更进一步,特地封装一些常用API,以便其他新手学习使用。接下来将完成下面一个个计划功能 1.  顺序执行 task1,task2 2. 并发执行 task1,task2 3. 等待执行 task2 需等待 task1执行完毕后执行 4. 延迟执行 task1 需要10秒之后执行 5. 心跳执行 异步任务按指定间隔执行 Task  6. 任务执行感知生命周期,可以跟随当前activity的生命周期结束而自动结束,并可以配置是否在重新打开activity时是否要重新执行 7. 任务执行可选主线程还是子线程 8. 任务执行可以选择 需要网络或者不需要网络 9. 任务执行可以选择网络制式4G 或者wifi下执行(5.0以上特性) 10.任务可以选择在充电时执行(5.0以上特性) 11. 任务执行可以随时取消,可以取消所有当前任务 目前框架已经做到前7项计划,后续将逐渐完善。 代码演示 1. 顺序执行代码 代码 效果 顺序执行效果图 2. 并发执行 并且分别延迟1秒,3秒 代码 效果 并发效果图 3. 等待执行 代码 效果 等待效果...
zb1500427248653 发布于 1个月前 阅读 1544 点赞 1

腾讯祭出大招VasSonic,让你的H5页面首屏秒开

# VasSonic成长历程 --- ## 前言 2017.8.8 14时,SNG增值产品部Vas团队研发的轻量级高性能Hybrid框架VasSonic通过了公司最终审核,作为腾讯开源组件分享给大家。从当初立项优化页面加载速度,到不断摸索、优化,再到整理代码、文档,最终在Github上开源,并且在24小时内获取star数超过1600。我们非常高兴看到我们的成果收到这么多的关注,趁此机会,正好回顾一下VasSonic的成长历程,也希望能够让大家更了解VasSonic。 ## 项目背景 Web相信大家再熟悉不过了,它具有快速迭代发布的天然优势,但也存在中一些让人诟病的问题,比如加载速度慢,体验差等。在此之前,手Q上很多页面首屏打开速度居高不下,甚至有些耗时达到3s以上,这意味着用户打开页面必须经过3秒之后才能进行交互操作,体验相当差,很多用户忍受不了这个漫长的时间直接流失掉了。 为了提升用户体验和业务用户留存率,我们很多业务一开始通过Web开发,等页面模型验证符合预期后,再将H5页面转化成原生界面。我们很快意识到这不是一种健康的可持续的开发模式,一方面存在重复人力浪费,另外一方面原生商城除了速度快一点,要运营活动改版都很难。 所以后来团队改了切入方向,安排人力专心研究如何加快页面打开速...
腾讯开源 发布于 1个月前 阅读 1304 评论 3 点赞 3

iOS使用Instrument-Time Profiler工具分析和优化性能问题

Instrument是Xcode自带的性能分析工具,这篇文章介绍其中的一个Time Profiler工具,找到APP中的性能瓶颈,并且去优化这个性能问题。
aron1992 发布于 1个月前 阅读 178 点赞 1

VasSonic轻量级的高性能的Hybrid框架正式开源

  VasSonic取名于世嘉游戏形象音速小子,是腾讯QQ会员 VAS团队研发的一个轻量级的高性能的Hybrid框架,专注于提升页面首屏加载速度,完美支持静态直出页面和动态直出页面,兼容离线包等方案。目前QQ会员、QQ购物、QQ钱包、企鹅电竞等业务已经在使用,平均日均PV在1.2亿以上,并且这个数字还在快速增长。 接入VasSonic后首次打开可以在初始化APP的时候并行请求页面资源,并且具备边加载边渲染的能力。非首次打开时,APP可以快速加载上次打开动态缓存在本地的页面资源,然后动态刷新页面。腾讯手机QQ通过VasSonic框架使得页面首屏耗时平均低于1S以下。 使用前后对比(OPPO R9机器,3G环境) 使用Sonic模式前 使用Sonic模式后 VasSonic功能 目前VasSonic框架是市面上支持最为完善的Hybrid框架,完美适用于静态直出页面和动态直出页面。具有以下几大特性: 1、快速 VasSonic通过中间层启动子线程并发拉取页面主资源和流式拦截的方式,支持内核边加载边渲染,弱化终端初始化过程耗时的影响,同时对页面进行动态缓存和增量更新,减少页面对网络数据传输的依赖,极速提升H5页面的加载速度。 2、省流量 VasSonic支持动态缓存页面内容,通过客户端和服务端遵守一定的格式规范,每次请...
腾讯开源 发布于 1个月前 阅读 444 评论 1

微信小程序--鼠标事件 & 点击事件返回值的target分析

事件分为冒泡事件和非冒泡事件:  1. 冒泡事件(bind):当一个组件上的事件被触发后,该事件会向父节点传递。  2. 非冒泡事件(catch):当一个组件上的事件被触发后,该事件不会向父节点传递
第九程序 发布于 2个月前 阅读 225

长按UIWebView上的图片保存到相册

> 不知道各位对于这个需求要如何解决? > > 可能有些人会想到js与原生交互,js监听图片点击事件,然后将图片的url传递给原生App端,然后原生App将图片保存到相册,这样子麻烦吗?超麻烦。(1)、js监听图片长按事件;(2)、js将图片url传递给原生;(3)、原生通过图片的url生成UIImage;(4)、保存UIImage到系统相册,巨麻烦啊,大哥,我很懒的好不好 #### 那么问题跑出来了,怎么办最简单? * 鉴于个人道行尚浅,我就将自己的想法说出来 * 有个js的api:`Document.elementFromPoint()` > The`elementFromPoint()`method of the[`Document`](https://developer.mozilla.org/en-US/docs/Web/API/Document)interface returns the topmost element at the specified coordinates. 所以根据这个提示,我们完全可以只在App原生端做一些代码开发,实现这个需求 #### 开发步骤 * 给UIWebView添加长按手势 * 监听手势动作,拿到坐标点(x,y) * UIWebView注入js:Document.elementFromPoint(x,y).src拿到img标签的src * 判断拿到的src是否有值,有值则代表点击的网页上的img标签,此时弹出对话框,是否保存到相册。如果src为空,则代表点击网页上的非img标签,则不需要弹出对话框。...
杭城小刘 发布于 2个月前 阅读 187 评论 5

Android6.0------权限申请RxPermissions

前面写了Android6.0权限介绍和权限单个,多个申请,用的是纯Java代码,本文主要说的是借助第三方库来实现权限申请。 借助第三方库 RxPermissions来申请6.0权限。 RxPermissions库地址:https://github.com/tbruyelle/RxPermissions bulid.gradle引入: compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' compile "io.reactivex.rxjava2:rxjava:2.0.0" 权限相关知识,权限表请看博客:   Android6.0------权限管理          Android6.0------权限申请管理(单个权限和多个权限申请) 前提:APP运行在Android 6.0 (API level 23)或者更高级别的设备中,而且targetSdkVersion>=23时,系统将会自动采用动态权限管理策略, 先来看看效果图:(注:如果未授权就点击打电话或拍照就会直接闪退,由此6.0必须手动授权,开发时如果未授权,可以判断并提示用户从新授权)              上图: 1:单个授权,电话授权。 2:有电话,SD卡,拍照授权三个一起授权   单个授权 //检查版本是否大于M if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //单个权限 rxPermissions.reque...
切切歆语 发布于 2小时前 阅读 2

检查项目中的内存泄漏问题

使用Xcode自带的 Instrusments 工具找到项目中造成内存泄漏的代码
王素年 发布于 3个月前 阅读 16

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

iOS - OC 语言新特性

在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 Objective-C 的一些新特性和新功能。这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接 低版本的 iOS 系统
王素年 发布于 2个月前 阅读 9

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 发布于 2个月前 阅读 112

TP3.2校验微信公众号、小程序 服务器地址

在TP3.2里面,写一个控制器,用来校验微信公众号、小程序的服务器地址
第九程序 发布于 2个月前 阅读 19

反编译别人的app

一:这里会介绍两个工具class-dump和Hopper Disassembler。 在Terminal中执行 class-dump 如果报错就安装,class-dump下载地址:http://stevenygard.com/projects/class-dump/   打开Terminal,输入mkdir ~/bin,在当前用户根目录下创建一个bin目录。 把下载下来的 dmg 打开,复制文件里面的class-dump到创建的bin目录下。赋予其可执行权限: chmod +x ~/bin/class-dump 打开bash_profile文件配置环境变量: vim ~/.bash_profile 按下 i 键进入编辑状态,在最下方加一行 export PATH=$HOME/bin/:$PATH 按下esc键,再按shift+: 输入 wq进行保存退出编辑 在Terminal中执行source ~/.bash_profile 测试是否改变成功 测试结果为: ZSY-Air:~ zhangshiyu$ class-dump class-dump 3.5 (64 bit) Usage: class-dump [options] <mach-o-file> where options are: -a show instance variable offsets -A show implementation addresses --arch <arch> choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64, armv6, armv7, armv7s, arm64) -C <regex> only display classes matching...
云上飞飞 发布于 2个月前 阅读 22

百度 语音识别 REST API

http://ai.baidu.com/docs?castk=LTE%3D#/ASR-API/top
datacube 发布于 1个月前 阅读 12

手动绑定

binder.bind(Codec.class).annotatedWith(Names.named("codec")).toInstance(providerInitParams.getCodec()); binder.bind(String[].class).annotatedWith(Names.named("hosts")).toInstance(providerInitParams.getHosts()); binder.bind(Integer.class).annotatedWith(Names.named("connectionPerHostCount")) .toInstance(providerInitParams.getConnectionPerHostCount()); binder.bind(ProviderExecutorConfigs.class).toInstance(providerInitParams.getProviderExecutorConfigs()); binder.bind(EventBus.class).toInstance(new EventBus()); binder.bind(Integer.class).annotatedWith(Names.named("readIdleInterval")) .toInstance(providerInitParams.getReadIdleInterval()); binder.bind(Integer.class).annotatedWith(Names.named("closeAfterNotResponseHeartbeat")) .toInstance(providerInitParams.getCloseAfterNotResponseHeartbeat()); if (providerInitParams.getProperties() != null) { binder.bind((Class) providerInitParams.getProperties().getClass()).toInstance( providerInitParams.getProperties()); } 从外部传入实例对象,对象持有编码...
yinhex 发布于 3周前 阅读 16

ffmpeg+nginx 实现视频推流

想做个视频网址,发现这个是用于做直播用的
NLGBZJ 发布于 1周前 阅读 31

推荐手机H5应用快速开发 UI库(Framework7、SUI(淘宝)、MUI、WeUI(微信)、GMU(百度)、Frozen UI(QQ))

http://blog.csdn.net/BuddyUU/article/details/52153637?locationNum=3 推荐手机H5应用快速开发 UI库(Framework7、SUI(淘宝)、MUI、WeUI(微信)、GMU(百度)、Frozen UI(QQ))   推荐手机H5应用快速开发 UI库 Framework7(阿里巴巴)、SUI(淘宝)、MUI( dcloud-HBuilder)、WeUI(微信)、Frozen UI(腾讯手机QQ)、GMU(百度)、Amaze UI(云适配) 等… Framework7 Framework7 是一个开源免费的框架可以用来开发混合移动应用(原生和HTML混合)或者开发 iOS & Android 风格的WEB APP。也可以用来作为原型开发工具,可以迅速创建一个应用的原型。 Framework7 最主要的功能是可以使用HTML、CSS和JS来开发iOS7应用。Framework7 是完全免费开源的。  Framework7 并不能兼容所有的设备。她只专注于为 iOS 和 Google Material 设计提供最好的体验。  如果你想开发 iOS 或者 Android 混合应用(Phonegap)或者你想开发 iOS 和 Google Material 风格的WEB APP,那么Framework7将会是你的首选。  阿里巴巴旗下  http://framework7.taobao.org/  http://framework7.io/ SUI mobile SUI Mobile 是一套基于 Framework7 开发的UI库。它非常轻量、精美,只需要引入我们的CDN文件就可...
壹峰 发布于 1周前 阅读 21

1111

11
奥巴码侬 发布于 3个月前 阅读 27

百度鹰眼轨迹查询历史轨迹并显示在地图上

BaiduMap,记录一下
安之若命 发布于 3个月前 阅读 53 评论 1 点赞 1

13个原子操作类

类的小工具包,支持在单个变量上解除锁的线程安全编程
t_yapeng 发布于 2个月前 阅读 9

Xcode9 新特性 Safe Area Layout Guide

楼主已经把xcode升级到xcode9 beta,创建xib的时候报了`Safe Area Layout Guide before ios9.0`的错,由于项目最低支持iOS8,估计是又出了什么新特性,Google一下原因如下 苹果在iOS7中引入的Top Layout Guide和Bottom Layout Guide,这些布局指南在iOS 11中被弃用,取而代之的是Safe Area Layout Guide. #### Top and Bottom Layouts Guides 当一个viewcontroller 被嵌入到navigationcontroller and tab bar 中时,我们可以使用 Top Layout Guide和Bottom Layout Guide 让view根据上下锚点自适应内容 如图所示 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-001.png "在这里输入图片标题") #### Safe Area Layout Guide 在iOS11中苹果用单独的Safe Area属性代替了上面的属性.安全区域限制于顶部和底部的锚点如图 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-002.png "在这里输入图片标题") #### 解决 在xib属性中把`Safe Area Layout Guide`属性勾去掉 ![](https://ws2.sinaimg.cn/large/006tNc79gy1fj9pofhk1pj318k0fo773.jpg) 更多可参考[WWDC 2017 Session 412 Auto Layout Techniques in Interface Builder](https:/...
她吃西红柿 发布于 2周前 阅读 1503 点赞 1

【整理】ios11适配 以及会有的坑 持续更新。。。

1、iPhone X尺寸问题 分辨率1125*2436  (375*812) 导航栏为 44+44  原来为20+44 底部tabbar  49+34  其余屏幕 49+0   2、打印线程问题 Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation] PID: 49130, TID: 336237, Thread name: (none), Queue name: WriteLogQueue, QoS: 0 造成原因是因为原本 需要在主线程执行的代码 被放在了子线程里边 解决方法:在scheme 里边取消主线程检测 (如下图   不建议使用) 或者修改代码 把出问题的代码放在主线程里边即可 我这里目前发现了shareSDK 内部有状态栏设置在子线程 出现打印问题   3 、automaticallyAdjustsScrollViewInsets 在ios11 系统下需要使用contentInsetAdjustmentBehavior 代替 否则会出现问题 需要注意 UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种: -automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距. -scrollableAxes 自动计算内边距. -never不计算内边距 -always 根据safeAreaInsets 计算内边距 很显然,我们这里要设置为 never   4、判断ios11 系...
冰泪_ 发布于 3天前 阅读 196

一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

一套代码,三端生产:移动Web、iOS、Android。 知识体系,无缝衔接:框架、工具、方法。
柯南和由美 发布于 4天前 阅读 392

面试

 1、明确你的项目到底是做什么的,有哪些功能 2、明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用 3、明确你的模块在整个项目中所处的位置及作用 4、明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术 在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况下(这一定是扣分项),可以通过这种方式来一定程度上地弥补并且增进面试官对你的好感度。 补充一点,在面试中聊你的项目的时候,有一个问题90%是绕不过的:谈一下你在项目中解决过的比较复杂的问题。这需要在工作中不断去发现和探索,不需要多, 在你自己目前的项目中只要你找到一两个能说的问题就行。一个小技巧是,即使问题不是你解决的而是别人解决的,但是你把这个问题弄懂、搞透了, 在面试的时候你一样可以把这个问题当作是你自己解决的来说----毕竟,谁来管这个问题当时到底是不是你解决的呢? 关于专业技能 写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下, 以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得...
泡海椒 发布于 16小时前 阅读 18

图片压缩处理的一个可行解决方法【OC】

图片处理 图片压缩
w_sen 发布于 4天前 阅读 248 点赞 1

适配 iPhone X 之异形屏

苹果终于在一年一度的秋季发布会发布了 iPhone 十周年纪念版:iPhone X。 iPhone X 是 2014 发布 iPhone 6 之后又一次外形的变化,也是 iPhone 历史上(可能)最大的一次外观变化。 我相信很多开发者和设计师看到 iPhone X 的这个「天猫内定」屏幕的时候心里十分苦恼:该怎么为这个机型做设计和适配?这篇文章从苹果的 iPhone X 开发和设计指南出发,试图来解决这个问题。 需要注意的是,本文不对设计指南完整的、不保留的搬运,而是根据指南和个人实操,做出的结论。完整的内容请自行查看文末链接。如有错误欢迎指出。 先抛数据 iPhone X 采用了 2436*1125 分辨率,拥有一块大约 2.17:1 的屏幕。iPhone X 的屏幕像素比 iPhone 8 高出 145 pt。适配 iPhone X 时并不需要像传闻的一样使用 @4x 的素材,而是继续使用 @3x 即可。苹果鼓励我们使用 PDF 素材来缩小包大小。 iPhone X 的状态栏高度为 44 pt ,iPhone 8 和 iPhone 8 Plus 和以前一样为 20 点。经过我的测试,X 的 tabbar 比以前高出 43 个点(以前是 40,现在是 83)。需要注意的是,横屏时底部高度为 33 pt。这个数据可以用于底部适配,下文会讨论这个话题。 Safe Area iOS 11 为屏幕适配引入了一个十分重要的概念...
秦无炎 发布于 3天前 阅读 40

入坑 Kotlin 开发前,这些项目能让你少走弯路

自 Google 在 I / O 2017 上宣布 Kotlin 成为 Android 官方支持开发语言后,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用,许多知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。 Kotlin “上位”已将近 100 天,不过目前相关的技术教程仍不算多。如果你正在考虑入坑 Kotlin ,不妨先看看下面这些使用 Kotlin 开发的开源项目,或许前人的经验能让你少走许多弯路。 1、Bandhook-Kotlin 这是一个完全用 Kotlin 语言编写的 Android 音乐应用,是 Play Store 中的 Bandhook 的 Kotlin 版本。目前支持连接到 LastFm 并检索一些音乐乐队,以及显示歌手详情。该项目旨在展示如何使用 Kotlin 完整的编写复杂(至少在架构中)项目。 2、Tachiyomi 一个主要使用 Kotlin 语言编写的  Android 开源漫画阅读器,目前仅发布了测试版本。支持在线、离线阅读,支持 MyAnimeList ,支持章节过滤和从上次阅读点恢复,支持图书管理,阅读器可配置。 3、Twidere-Android 一个 Material Design 风格,功能丰富的 Kotlin 版 Twitter 应用,适用于 Android 4.0+ 。内置夜间模式,支持多账号,支持上传照片和视频,并带有强大...
编辑部的故事 发布于 1个月前 阅读 3276 评论 4 点赞 6

Xcode9 新特性 Safe Area Layout Guide

楼主已经把xcode升级到xcode9 beta,创建xib的时候报了`Safe Area Layout Guide before ios9.0`的错,由于项目最低支持iOS8,估计是又出了什么新特性,Google一下原因如下 苹果在iOS7中引入的Top Layout Guide和Bottom Layout Guide,这些布局指南在iOS 11中被弃用,取而代之的是Safe Area Layout Guide. #### Top and Bottom Layouts Guides 当一个viewcontroller 被嵌入到navigationcontroller and tab bar 中时,我们可以使用 Top Layout Guide和Bottom Layout Guide 让view根据上下锚点自适应内容 如图所示 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-001.png "在这里输入图片标题") #### Safe Area Layout Guide 在iOS11中苹果用单独的Safe Area属性代替了上面的属性.安全区域限制于顶部和底部的锚点如图 ![输入图片说明](https://useyourloaf.com/assets/images/2017/2017-06-23-002.png "在这里输入图片标题") #### 解决 在xib属性中把`Safe Area Layout Guide`属性勾去掉 ![](https://ws2.sinaimg.cn/large/006tNc79gy1fj9pofhk1pj318k0fo773.jpg) 更多可参考[WWDC 2017 Session 412 Auto Layout Techniques in Interface Builder](https:/...
她吃西红柿 发布于 2周前 阅读 1503 点赞 1

一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

一套代码,三端生产:移动Web、iOS、Android。 知识体系,无缝衔接:框架、工具、方法。
柯南和由美 发布于 4天前 阅读 392

图片压缩处理的一个可行解决方法【OC】

图片处理 图片压缩
w_sen 发布于 4天前 阅读 248 点赞 1

【整理】ios11适配 以及会有的坑 持续更新。。。

1、iPhone X尺寸问题 分辨率1125*2436  (375*812) 导航栏为 44+44  原来为20+44 底部tabbar  49+34  其余屏幕 49+0   2、打印线程问题 Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation] PID: 49130, TID: 336237, Thread name: (none), Queue name: WriteLogQueue, QoS: 0 造成原因是因为原本 需要在主线程执行的代码 被放在了子线程里边 解决方法:在scheme 里边取消主线程检测 (如下图   不建议使用) 或者修改代码 把出问题的代码放在主线程里边即可 我这里目前发现了shareSDK 内部有状态栏设置在子线程 出现打印问题   3 、automaticallyAdjustsScrollViewInsets 在ios11 系统下需要使用contentInsetAdjustmentBehavior 代替 否则会出现问题 需要注意 UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种: -automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距. -scrollableAxes 自动计算内边距. -never不计算内边距 -always 根据safeAreaInsets 计算内边距 很显然,我们这里要设置为 never   4、判断ios11 系...
冰泪_ 发布于 3天前 阅读 196

iOS 11正式版终于来了!强力助攻小程序

今日凌晨1时,果粉们翘首以盼好久的iOS 11正式版系统终于发布更新了,更新之后的系统不论是界面还是功能上都有了很多心突破,更令人惊喜的是,苹果本次更新的 iOS 11系统,居然对小程序生态有着不可忽视的推动性! 1、原生相机支持扫码功能,简直为小程序而生!
小程序社区 发布于 3天前 阅读 99 评论 4

Android 输入法详解

依然清晰的记得我是如何掉入输入法这个大坑的。 那是一个不错的天气,我们领导廖哥,让我改一个输入法的按键。
冰雪情缘l 发布于 2周前 阅读 408

iOS11 automaticallyAdjustsScrollViewInsets和estimatedRowHeight适配

### UIScrollView UIScrollView新增contentInsetAdjustmentBehavior代替automaticallyAdjustsScrollViewInsets - automaticallyAdjustsScrollViewInsets:系统会根据所在界面的statusbar, searchbar, navigationbar等自动调整ScrollView的inset. ![](https://ws1.sinaimg.cn/large/006tKfTcly1fisiocg8ksj30h40akdhl.jpg) ``` typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) { UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but for backward compatibility will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewInsets = YES inside a navigation controller, regardless of whether the scroll view is scrollable UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES) UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted UIScrollViewContentI...
她吃西红柿 发布于 1个月前 阅读 144

入坑 Kotlin 开发前,这些项目能让你少走弯路

自 Google 在 I / O 2017 上宣布 Kotlin 成为 Android 官方支持开发语言后,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用,许多知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。 Kotlin “上位”已将近 100 天,不过目前相关的技术教程仍不算多。如果你正在考虑入坑 Kotlin ,不妨先看看下面这些使用 Kotlin 开发的开源项目,或许前人的经验能让你少走许多弯路。 1、Bandhook-Kotlin 这是一个完全用 Kotlin 语言编写的 Android 音乐应用,是 Play Store 中的 Bandhook 的 Kotlin 版本。目前支持连接到 LastFm 并检索一些音乐乐队,以及显示歌手详情。该项目旨在展示如何使用 Kotlin 完整的编写复杂(至少在架构中)项目。 2、Tachiyomi 一个主要使用 Kotlin 语言编写的  Android 开源漫画阅读器,目前仅发布了测试版本。支持在线、离线阅读,支持 MyAnimeList ,支持章节过滤和从上次阅读点恢复,支持图书管理,阅读器可配置。 3、Twidere-Android 一个 Material Design 风格,功能丰富的 Kotlin 版 Twitter 应用,适用于 Android 4.0+ 。内置夜间模式,支持多账号,支持上传照片和视频,并带有强大...
编辑部的故事 发布于 1个月前 阅读 3276 评论 4 点赞 6

给 Web 开发人员推荐的开源图形库 —— 数据可视化

现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高,数据可视化、动画交互、2D/3D 等元素已然成为标配。 以下是为 Web 开发者推荐的一些精品开源图形库,旨在专注于最常见的问题和最常用的东西。将针对动画(Animation)、数据可视化(Data Visualization)、2D/3D 分别整理,欢迎保持关注。 给 Web 开发人员推荐的开源图形库 —— 动画 给 Web 开发人员推荐的开源图形库 —— 2D/3D 数据可视化 1、D3.js 最流行的可视化库之一,被各种表格插件、库、框架所使用。它允许绑定任意数据到 DOM ,然后将数据驱动转换应用到 Document 中。你可以使用它从数组中生成 HTML 表,或是使用相同的数据创建具有平滑过渡和交互的交互式 SVG 条形图。 效果预览:点此查看 2、Recharts 基于 React 的组合式图表,用解耦的、可重用的 React 组件快速构建你的图表。依赖于轻量级的 D3 子模块构建 SVG 元素,还可以调整组件的属性与传递组件来自定义图表。 效果预览:点此查看 类似的将 React 和 D3 结合在一起的还有: Victory 一个用于构建图表模块化和交互式数据可视化的 ReactJS 库。效果预览 VX 可重用的 low-level 可视化组件集合。效果预览 3、ECharts 一个由百度...
编辑部的故事 发布于 2个月前 阅读 7013 评论 12 点赞 12

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

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

腾讯祭出大招VasSonic,让你的H5页面首屏秒开

# VasSonic成长历程 --- ## 前言 2017.8.8 14时,SNG增值产品部Vas团队研发的轻量级高性能Hybrid框架VasSonic通过了公司最终审核,作为腾讯开源组件分享给大家。从当初立项优化页面加载速度,到不断摸索、优化,再到整理代码、文档,最终在Github上开源,并且在24小时内获取star数超过1600。我们非常高兴看到我们的成果收到这么多的关注,趁此机会,正好回顾一下VasSonic的成长历程,也希望能够让大家更了解VasSonic。 ## 项目背景 Web相信大家再熟悉不过了,它具有快速迭代发布的天然优势,但也存在中一些让人诟病的问题,比如加载速度慢,体验差等。在此之前,手Q上很多页面首屏打开速度居高不下,甚至有些耗时达到3s以上,这意味着用户打开页面必须经过3秒之后才能进行交互操作,体验相当差,很多用户忍受不了这个漫长的时间直接流失掉了。 为了提升用户体验和业务用户留存率,我们很多业务一开始通过Web开发,等页面模型验证符合预期后,再将H5页面转化成原生界面。我们很快意识到这不是一种健康的可持续的开发模式,一方面存在重复人力浪费,另外一方面原生商城除了速度快一点,要运营活动改版都很难。 所以后来团队改了切入方向,安排人力专心研究如何加快页面打开速...
腾讯开源 发布于 1个月前 阅读 1304 评论 3 点赞 3

Ionic3 页面的生命周期

如官网文档所示,常用的生命周期有如下6个: Event Desc ionViewDidLoad 当页面加载的时候触发,仅在页面创建的时候触发一次,如果被缓存了,那么下次再打开这个页面则不会触发 ionViewWillEnter 顾名思义,当将要进入页面时触发 ionViewDidEnter 当进入页面时触发 ionViewWillLeave 当将要从页面离开时触发 ionViewDidLeave 离开页面时触发 ionViewWillUnload 当页面将要销毁同时页面上元素移除时触发   ionViewDidLoad(){ console.log("1.0 ionViewDidLoad 当页面加载的时候触发,仅在页面创建的时候触发一次,如果被缓存了,那么下次再打开这个页面则不会触发"); } ionViewWillEnter(){ console.log("2.0 ionViewWillEnter 顾名思义,当将要进入页面时触发"); } ionViewDidEnter(){ console.log("3.0 ionViewDidEnter 当进入页面时触发"); console.log("ionViewDidEnter"); let body = document.getElementById('#body'); console.log("body:[" + body + "]"); } ionViewWillLeave(){ console.log("4.0 ionViewWillLeave 当将要从页面离开时触发"); } ionViewDidLeave(){ console.log("5.0 ionViewDidLeave 离开页面时触发"); } ionViewWillUnload(){ ...
yizhichao 发布于 2个月前 阅读 170

[AndroidStudio进阶]重新认识AndroidStudio和Gradle

前言 主要从AndroidStudio的环境安装升级,Gradle,Eclipse转AS,多渠道配置,Maven私服,Action,Option等几个方面出发,讲一些操作技巧以及我对AndroidStudio使用的一些理解与经验。本文较全面的讲述了我们在开发中必须要了解的,比较多而全,可能不能马上记住,目的在于大家看我之后能有一个认识,在需要使用的时候知道有这么个东西。希望对你的开发工作有所帮助,不足之处,请批评指正。 知识大纲 Install&Settings&Update  Gradle AS Gradle  Groovy Gradle编程框架 task Android文件结构 几个gradle配置文件 Grade构建过程简析   构建流程图 分析 构建速度优化  注意AS配置 慎重sub-module 守护进程deamon 并行编译parallel 依赖库使用固定版本  去除无用的构建任务task 巧用include Instant Run Maven仓库  maven()和jcenter() maven私服  多渠道  简介 配置 Eclipse项目彻底转为AS  策略 坑 技巧 只有一个快捷键  提示类 编辑类 查找替换类 代码检查以及质量改善  inspect code clean up 调试  单步调试 + Monitors   Memory CPU\NetWork\GPU 单元测试  分分钟上手单元测试 单元测试的意义简单理解 终极技巧  插件:plugin  SimpleUML MarkDown...
微笑的江豚 发布于 5天前 阅读 29

适配 iPhone X 之异形屏

苹果终于在一年一度的秋季发布会发布了 iPhone 十周年纪念版:iPhone X。 iPhone X 是 2014 发布 iPhone 6 之后又一次外形的变化,也是 iPhone 历史上(可能)最大的一次外观变化。 我相信很多开发者和设计师看到 iPhone X 的这个「天猫内定」屏幕的时候心里十分苦恼:该怎么为这个机型做设计和适配?这篇文章从苹果的 iPhone X 开发和设计指南出发,试图来解决这个问题。 需要注意的是,本文不对设计指南完整的、不保留的搬运,而是根据指南和个人实操,做出的结论。完整的内容请自行查看文末链接。如有错误欢迎指出。 先抛数据 iPhone X 采用了 2436*1125 分辨率,拥有一块大约 2.17:1 的屏幕。iPhone X 的屏幕像素比 iPhone 8 高出 145 pt。适配 iPhone X 时并不需要像传闻的一样使用 @4x 的素材,而是继续使用 @3x 即可。苹果鼓励我们使用 PDF 素材来缩小包大小。 iPhone X 的状态栏高度为 44 pt ,iPhone 8 和 iPhone 8 Plus 和以前一样为 20 点。经过我的测试,X 的 tabbar 比以前高出 43 个点(以前是 40,现在是 83)。需要注意的是,横屏时底部高度为 33 pt。这个数据可以用于底部适配,下文会讨论这个话题。 Safe Area iOS 11 为屏幕适配引入了一个十分重要的概念...
秦无炎 发布于 3天前 阅读 40

React前后端同构防止重复渲染

首先解释React前后端同构、React首屏渲染的概念。然后通过这2个概念解决服务端渲染完成后浏览器端重复渲染的问题。
随风溜达的向日葵 发布于 1个月前 阅读 1643 评论 2 点赞 2

java 创建HttpClient,忽略ssl认证

# Create HttpClient Code ``` private HttpClient getHttpClient() { if(context == null) { return new DefaultHttpClient(); } if("http".equals(context.getScheme())){ return new DefaultHttpClient(); } else { KeyStore truestStore; SSLSocketFactory socketFactory = null; try{ truestStore = KeyStore.getInstance(KeyStore.getDefaultType()); truestStore.load(null, null); socketFactory = new NoCheckSSLSocketFactory(truestStore); } catch (CertificateException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (UnrecoverableKeyException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (NoSuchAlgorithmException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (KeyStoreException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (KeyManagementException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (IOException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } if(socketFactory == null) { re...
1071954237 发布于 3天前 阅读 21

Android WebView实现js与java交互

近来自己想做一个Hybrid APP,H5为主,java辅之,考虑用cordova,对其js与java交互原理甚感兴趣,于是,自己折腾了一番
BarZu 发布于 2周前 阅读 65

Android RadioButton设置选中时文字和背景颜色同时改变

http://blog.csdn.net/liuwan1992/article/details/52688408
yanglingui 发布于 3天前 阅读 21

小白接口——小白都会用的接口,免开发,直接可用

小白接口基于PhalApi框架研发而来,面向小型开发群体,提供小白用户也能使用的接口服务,免除后端接口开发的成本,助你轻松开发移动APP。
暗夜在火星 发布于 5天前 阅读 20

Spring boot with Elasticsearch 5.5.1

Spring data 目前还不支持 Elasticsearch 5.5.x 所以需要通过注入 TransportClient 这就意味着使用 5.5.x 版本你无法使用 ElasticsearchRepository 这种特性,只能通过官方的 TransportClient 操作 Elasticsearch。
neo-chen 发布于 2个月前 阅读 1041 评论 1 点赞 1

Android6.0------权限申请RxPermissions

前面写了Android6.0权限介绍和权限单个,多个申请,用的是纯Java代码,本文主要说的是借助第三方库来实现权限申请。 借助第三方库 RxPermissions来申请6.0权限。 RxPermissions库地址:https://github.com/tbruyelle/RxPermissions bulid.gradle引入: compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' compile "io.reactivex.rxjava2:rxjava:2.0.0" 权限相关知识,权限表请看博客:   Android6.0------权限管理          Android6.0------权限申请管理(单个权限和多个权限申请) 前提:APP运行在Android 6.0 (API level 23)或者更高级别的设备中,而且targetSdkVersion>=23时,系统将会自动采用动态权限管理策略, 先来看看效果图:(注:如果未授权就点击打电话或拍照就会直接闪退,由此6.0必须手动授权,开发时如果未授权,可以判断并提示用户从新授权)              上图: 1:单个授权,电话授权。 2:有电话,SD卡,拍照授权三个一起授权   单个授权 //检查版本是否大于M if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //单个权限 rxPermissions.reque...
切切歆语 发布于 2小时前 阅读 2

Android Emulator root

## 工具下载 ``` wget https://s3-us-west-2.amazonaws.com/supersu/download/zip/SuperSU-v2.82-201705271822.zip ``` 下载地址:http://www.supersu.com/download
dingdayu 发布于 12小时前 阅读 3

面试

 1、明确你的项目到底是做什么的,有哪些功能 2、明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用 3、明确你的模块在整个项目中所处的位置及作用 4、明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术 在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况下(这一定是扣分项),可以通过这种方式来一定程度上地弥补并且增进面试官对你的好感度。 补充一点,在面试中聊你的项目的时候,有一个问题90%是绕不过的:谈一下你在项目中解决过的比较复杂的问题。这需要在工作中不断去发现和探索,不需要多, 在你自己目前的项目中只要你找到一两个能说的问题就行。一个小技巧是,即使问题不是你解决的而是别人解决的,但是你把这个问题弄懂、搞透了, 在面试的时候你一样可以把这个问题当作是你自己解决的来说----毕竟,谁来管这个问题当时到底是不是你解决的呢? 关于专业技能 写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下, 以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得...
泡海椒 发布于 16小时前 阅读 18

iOS离屏渲染之优化分析

在进行`iOS`的应用开发过程中,有时候会出现卡顿的问题,虽然`iOS`设备的性能越来越高,但是卡顿的问题还是有可能会出现,而离屏渲染是造成卡顿的原因之一。因此,本文主要分析一下离屏渲染产生的原因及避免的方法,最后介绍一下`Xcode`自带的分析离屏渲染的工具`Instruments`的使用。 ## UIView和CALayer关系 `UIView`继承自`UIResponder`,可以处理系统传递过来的事件,如:`UIApplication`、`UIViewController`、`UIView`,以及所有从`UIView`派生出来的`UIKit`类。每个`UIView`内部都有一个`CALayer`提供内容的绘制和显示,并且作为内部`RootLayer`的代理视图。 `CALayer`继承自`NSObject`类,负责显示`UIView`提供的内容`contents`。`CALayer`有三个视觉元素:背景色、内容和边框,其中,内容的本质是一个`CGImage`。 下图为`CALayer`的结构图: ![图1](http://upload-images.jianshu.io/upload_images/1843940-257521052b758fd8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #### 界面渲染过程 `RunLoop`有一个`60fps`的回调,即每`16.7ms`绘制一次屏幕,所以`view`的绘制必须在这个时间内完成,`view`内容的绘制是`CPU`的工作,然后把绘制的内容交给`...
飞鱼湾 发布于 16小时前 阅读 6

Android实现FM收音机

实现源码下载链接 http://download.csdn.net/detail/hi_zhengjian/8794731     ***方法一:直接在app里面通过JNI访问HAL层***         FmRadio应用代码结构如下:   一、FMRadio.java通过FmRadioService提供的服务通过JNI访问到HAL层:   FmRadioService实现IfmService的一些接口,以及提供一些供Client调用的接口,接口里面调用到JNI。 例如: FmRadioService.java中private voidenableFmFacility(boolean bEnable)调用到 enableFmFacility_native。   enableFmFacility_native在com_android_server_FmService.cpp中实现,在映射表中注册,也就是所谓的JNI. 最终调用com_android_server_FmService.cpp中的android_FmService_enableFmFacility。   二、JNI简介: 传统的JNI需要遵循一定的命名规则,而Android改变了这种方式,可以通过以下两种方法把java层与C++层的代码进行映射,如下: 第一个参数是Java层的函数,第二个参数是函数的参数和返回类型也是属于java层,第三个参数是JNI实现的c++函数 static const JNINativeMethodgMethods[] = {     /* name,                       signature,      funcPtr */     { "enabl...
恒源祥 发布于 17小时前 阅读 1

从iOS 11 UI Kit中谈谈iOS 11的新变化

北京时间9月20日凌晨1点,iOS 11终于迎来了正式版的推送,相信各位小伙伴已经在第一时间进行了升级。iOS 11毫无疑问是一次大规模的系统更新,UI、系统内核、锁屏等多方面都进行了不同程度的改进。小编第一时间为大家整理好了iOS 11优秀 UI Kit的下载资源,并且与大家谈一谈UI Kit背后的iOS 11的新变化。 1、 iOS 11 UI 的新变化 在准备着手设计前,首先我们来梳理一下iOS 11 的设计理念。在iOS系统的长期发展中,随着功能和界面的不断丰富,整个系统日趋复杂,App内部的功能架构也有同样的情况。因此,Apple设计团队在新系统中强调了“指引”这一设计思维,并充分地把这一设计思维贯彻到了iOS 11的方方面面。 此外,我们再来看看苹果设计团队的设计原则: • 内容凸显的第一原则 • UI元素不与内容竞争,除非是帮助用户去理解潜在功能的作用 在这样的设计思维和原则的基础上,我们从以下几个角度进行分析。 (1)粗体标题导航栏 扁平化设计中,文字排版影响着信息层级的展示的清晰与否,通过文本的字号、字重、颜色等的对比去建立清晰的信息层级,而不用太多的装饰元素。iOS 11中最让你印象深刻的莫过于粗体大标题栏的变化。 如果你想要打造顶层是标签栏结构的APP,这种设计...
jongde 发布于 18小时前 阅读 4

iOS Swift4项目EFarm学习和总结

这个项目是Swift 零基础开始, 所以有大量的Swift基础语法介绍, 除此之外也会包含一些封装的示例, MVVM的用法, 同时也包含项目优化的理解和看法
iShown 发布于 18小时前 阅读 7

ios开发者谈谈技术面试那些坑

 转眼又是秋季,是结束也是一场开始,离开了校园,我们中的大多数将要开始自己的职场生涯,我也是从大四开始漂泊北京,来来回回面试过几十次,经验丰富谈不上,但总是有可以说一说的东西。     首先,简历的制作,技术岗位求职要懂得HR看中你的地方,技术、人品,简历就是简单的陈述你的经历,不可做的太过于啰嗦,关键的地方要是你做过的项目,并介绍项目里的技术点和实现的功能,这里推荐智联的简历模板。有些同学刚刚毕业项目经验很少可以填写一些自己在校的编程比赛经历、实习项目等等。其次一些好的兴趣和活动经历是可以反应一个人的人品的,不要忽视一些小的细节,比如在上一家公司工作的时间,一般少于一年的就不要往上写了,这会令HR感到你的稳定性很差,招你进来会对公司造成损失的。好好过自己,牌已经发给你了,就看你如何打,我认识一个女生,是Dota世界女子组冠军,去摩根面试程员,前面的一堆技术问题回答的并不好,正觉无望的时候,面试官无意中看到她的玩游戏经历,后面半个小时竟然都在讲游戏,最后成功面上。并不是鼓励你们去玩游戏,只是想让你们懂的人生的每个节点都可以很精彩,要想精彩需要我们的思考乐观和努力,这也是面试官看中你的一点。   ...
秦无炎 发布于 19小时前 阅读 2

Android Studio中NDK开发傻瓜教程(CMake)

继上篇文章《Android Studio中NDK开发傻瓜教程(JNI)》之后,本篇介绍CMake技术在Android Studio中的NDK开发。 源码地址: https://github.com/xiaoliang0227/NDKDemo002 Step1:新建项目,命名为NDKDemo002,记得勾选“Include C++ support” Step2:一路点击“Next”,最终点击“Finish”完成新项目的创建 Step3:默认项目会自动生成一个cpp文件夹,在main下,该目录存放C相关的文件,项目本身是可以运行NDK的,感兴趣的大家可以直接运行试一下。我们本次教程不使用默认的native-lib.cpp,所以我们后边会删除掉他。原来的项目结构如下:   Step4:创建类包“cpp”,并在该包中创建文件”HelloNDK”,内容与结构如下: Step5:build项目 Step6:build完成后app/build/intermediates/classes/debug中结构如下: Step7:通过Android Studio 自带的Terminal定位到文件夹app/build/intermediates/classes/debug,如下: Step8:使用指令,生成c语言头文件。指令:javah -jni com.zyl.ndkdemo002.cpp.HelloNDK,目标头文件在app/build/intermediates/classes/debug下,文件名为“com.zyl.ndkdemo002.cpp.HelloNDK.h”,如果看不到请刷新下项目。示例如下: ”com.zyl.ndkdemo00...
JasonZhao 发布于 19小时前 阅读 2

Android中将图片裁剪成圆形的方法

直接上代码吧,如果需要拍照或者从相册中选择图片的功能,推荐一个开源库,用起来很方便 http://www.jianshu.com/p/35ce3b82773e //裁剪图片的第三方库http://www.jianshu.com/p/35ce3b82773e compile 'com.linchaolong.android:imagepicker:1.5' 这个库可以设置裁剪时的框是圆形的,但是获取的图片仍然是方形的,因此在裁剪后仍然需要对获取到的照片进行处理,以下为部分用到的核心方法 /**      * @param bitmap src图片      * @return      */     public static Bitmap getCircleBitmap(Bitmap bitmap) {         Bitmap output = Bitmap.createBitmap( bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);         Canvas canvas = new Canvas( output);         final int color = 0xff424242;         final Paint paint = new Paint();         final Rect rect = new Rect( 0, 0, bitmap.getWidth(), bitmap.getHeight());         paint.setAntiAlias( true);         paint.setFilterBitmap( true);         paint.setDither( true);         canvas.drawARGB( 0, 0, 0, 0);         pain...
小小_小小 发布于 20小时前 阅读 4

从阴阳师到王者荣耀, 游戏社交化将成趋势!

在ThinkSNS团队中,也有很多小伙伴喜欢玩游戏,对于游戏中的我们不认识的陌生人来说,王者荣耀、阴阳师的组队PK,狼人杀中声音互怼,本质上也都是陌生人兴趣社交的表现。
ThinkSNS账号 发布于 20小时前 阅读 4

Android Studio中NDK开发傻瓜教程(JNI)

本篇主要介绍在Android Studio中通过JNI完成NDK开发,后一篇文章会介绍通过CMake方式在Android Studio 中进行NDK开发,敬请期待。 源码地址: https://github.com/xiaoliang0227/NDKDemo001 Step1:新建项目,命名为NDKDemo001 Step2:一路点击“Next”,最终点击“Finish”完成新项目的创建 Step3:创建类包“cpp”,并在该包中创建文件”HelloNDK”,内容与结构如下: Step4:build项目 Step5:build完成后app/build/intermediates/classes/debug中结构如下: Step6:通过Android Studio 自带的Terminal定位到文件夹app/build/intermediates/classes/debug,如下: Step7:使用指令,生成c语言头文件。指令:javah -jni com.zyl.ndkdemo001.cpp.HelloNDK,目标头文件在app/build/intermediates/classes/debug下,文件名为“com_zyl_ndkdemo001_cpp_HelloNDK.h”,如果看不到请刷新下项目。示例如下: ”com_zyl_ndkdemo001_cpp_HelloNDK.h“内容如下: Step8:在src/main目录下新建文件夹“jni”并把“com_zyl_ndkdemo001_cpp_HelloNDK.h”剪切到该处,结构如下: Step9:在“jni”目录中新建c source文件“com_zyl_ndkdemo001_cpp_HelloNDK.c”,内容如下: Step10:配置a...
JasonZhao 发布于 22小时前 阅读 3

[日推荐]『质安查』买到放心的产品就靠它了

![](http://upload-images.jianshu.io/upload_images/5615783-95b5f19b9010ee3e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 喜欢买买买的小伙伴们一定都会担忧一个问题——产品是否合格、会不会买到假货? 有没有方便又可靠的质量检测工具能够解决这个问题呢? 有! 看看这个[小程序](http://www.wxapp-union.com/)—— # [**质安查**](http://store.dreawer.com/wxapp/zhi-an-cha.html) ![](http://image.dreawer.com/resource/wxapp/20170921/BA4CA303046A07FBD4419C9EB377327A.jpg) >简介:质安查,查产品质量,食品安全的神器,扫产品包装上的条形码,查该产品有没有被国家抽检,抽检合不合格,有没有质检报告,认证证书,产品备案等。 ![](http://image.dreawer.com/resource/wxapp/20170921/6F99758F0555C085866289D1F591DF32.jpg) >只需扫描条形码,就可以查看到这个产品的详细介绍以及质检报告 ![](http://image.dreawer.com/resource/wxapp/20170921/C46D7EE97AFA3B8BB1B85E9A83A9E755.jpg)![](http://image.dreawer.com/resource/wxapp/20170921/AE7C916F1A159870718446E0FA840ACA.jpg) >总结:操作简单、报告详细,有了这个小程序,再也不用担心...
小程序社区 发布于 23小时前 阅读 1

IntelliJ IDE 2017 完美注册方法(附IDE for Mac破解方法)

本文使用破解方式注册,支持正版,反对盗版,建议由经济实力的同学自觉购买安装。 1. 下载破解文件 JetbrainsCrack-2.6.9-release-enc.jar 下载地址: (由于无法上传附件,请自行百度搜索,本示例使用的版本号为2.6.9-release-enc,也可以使用最新的版本) http://idea.lanyus.com/ 2. 开始破解 一、将下载的JetbrainsCrack-2.6.9-release-enc.jar 破解补丁放在你的安装IDE下面的bin的目录下面(如图)。  我的是C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.3\bin  二、修改配置文件  在安装的idea下面的bin目录下面有2个文件 : 一个是idea64.exe.vmoptions,还有一个是idea.exe.vmoptions(如上图篮框)。  用记事本打开 分别在最下面一行增加一行: -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.3\bin\JetbrainsCrack-2.6.9-release-enc.jar “C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.3\bin\JetbrainsCrack-2.6.9-release-enc.jar”是对应的JetbrainsCrack-2.6.9-release-enc.jar的位置。 三、重启,填写注册码(到2099年到期)  重启一下软件,在进入出现有active code选择界面的时候,随便输入几个字母即可  能够进入应用界面则...
BrillantZhao 发布于 23小时前 阅读 4

Android ROM定制

前言:很多童鞋对美化很感兴趣,都想拥有一个完完全全属于自己风格的手机系统!对那些自定义全局背景,1%电量显示,透明下拉菜单。。。都很感冒!美化的重点跟难点就在于对"framework-res.apk"和"systemUI.apk"这两个文件的编译和反编译!这里说的编译和反编译是所有深度美化都必须要做的事,也就是说,所有的美化都是基于对apk的反编译后,才能进行的!而绝大多数修改"framework-res.apk"和"systemUI.apk"后导致无法进入系统,或者无限开机重启的,基本都是在编译跟反编译上出了问题! framework-res.apk  的修改 framework-res.apk文件简介: framework-res.apk文件位于/system/framework文件夹中,里面有着系统GUI的大部分的图片,包括图标,弹出对话框的样式,动作特效,界面布局,我们要知道"framework-res.apk"是不可以重签名的!(我们要切记这一点)另外,修改"framework-res.apk"之前务必先做好备份!这是相当重要的文件,稍有出错都会令你进不了系统的!以下为Framework-res.apk的文件结构: /assets /META-INF /res /AndroidManifest.xml /resources.arsc   复制代码 一、java平台的搭建、下载工具apktool 教程地址及下载地址:http://www.miui.com/thread-492332-1-1.h...
恒源祥 发布于 23小时前 阅读 3

[日推荐]『查找一下小程序』好用的搜索工具

![](http://upload-images.jianshu.io/upload_images/5615783-fd087f10f95a0efa.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我们习惯于“有问题,找度娘”,或者去知乎、豆瓣这些平台进行问答,现在有个[小程序](http://www.wxapp-union.com/)就可以帮你解决“疑难杂症”啦,快来看看—— # **[查找一下小程序](http://store.dreawer.com/wxapp/cha-zhao-yi-xia-xiao-cheng-xu.html)** ![](http://image.dreawer.com/resource/wxapp/20170921/699C58FC804F719BBB0D4F80FEAE3ABA.png) >**简介:**1.日常查询:手机归属地、ip、天气、邮编、今日油价、快递、周公解梦等2.娱乐搞笑:笑话大全、生肖配对、QQ号码吉凶3.用户反馈 ![](http://image.dreawer.com/resource/wxapp/20170921/86FC691DFB7CB990DCBC5D3B2523A564.jpg)![](http://image.dreawer.com/resource/wxapp/20170921/952E3ED50BB943437AC4E04DCA97BDDD.jpg) >该小程序里将问题进行了分类,点击进入、输入问题,就可快速查询,很方便哦! ![](http://image.dreawer.com/resource/wxapp/20170921/57003E7D6B7E5FADF5B0CB1E62A52A58.jpg) >如果有什么建议呢,就可以在这个界面提出,可以随便吐槽哦。...
小程序社区 发布于 1天前 阅读 4

C语言经典算法100例

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); }} ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10...
muliuhai 发布于 1天前 阅读 3

Android零基础入门第67节:RecyclerView数据动态更新

ListView的数据发生改变时需要调用notifyDataSetChanged来更新心,RecyclerView的数据发生改变时应该如何操作呢?
鑫鱻 发布于 1天前 阅读 2

Android6.0------权限申请管理(单个权限和多个权限申请)

Android开发时,到6.0系统上之后,有的权限就得申请才能用了。 Android将权限分为正常权限 和 危险权限 Android系统权限分为几个保护级别。需要了解的两个最重要保护级别是 正常权限 和 危险权限: (1)正常权限: 涵盖应用需要访问其沙盒外部数据或资源,但对用户隐私或其他应用操作风险很小的区域。 这些权限在应用安装时授予,运行时不再询问用户。例如: 网络访问、WIFI状态、音量设置等。 (2)危险权限: 涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。 例如: 读取通讯录、读写存储器数据、获取用户位置等。如果应用声明需要这些危险权限,则必须在运行时明确告诉用户,让用户手动授予。   权限相关知识,权限表请看博客: Android6.0------权限管理 前提:APP运行在Android 6.0 (API level 23)或者更高级别的设备中,而且targetSdkVersion>=23时,系统将会自动采用动态权限管理策略, 先来看看效果图:(注:如果未授权就点击打电话或拍照就会直接闪退,由此6.0必须手动授权,开发时如果未授权,可以判断并提示用户从新授权)               上图: 1:单个授权,电话授权。 2:有电话,SD卡,拍...
切切歆语 发布于 1天前 阅读 6

安卓调用WebServices

2012年前的很多都无法调取;
Mstart 发布于 2天前 阅读 3

React前后端同构防止重复渲染

首先解释React前后端同构、React首屏渲染的概念。然后通过这2个概念解决服务端渲染完成后浏览器端重复渲染的问题。
随风溜达的向日葵 发布于 1个月前 阅读 1643 评论 2 点赞 2

kotlin协程简单封装,助你一臂之力

简述 经过两天的学习历程,看遍了国内的经典博客,也看完了官方的文档。下面推荐大家阅读 好的文章: 开始使用Kotlin协程 官方: kotlinx.coroutines 如果英文够好,推荐看官网的,例子比较全面。 本项目源码地址 计划 学习过后,为了更进一步,特地封装一些常用API,以便其他新手学习使用。接下来将完成下面一个个计划功能 1.  顺序执行 task1,task2 2. 并发执行 task1,task2 3. 等待执行 task2 需等待 task1执行完毕后执行 4. 延迟执行 task1 需要10秒之后执行 5. 心跳执行 异步任务按指定间隔执行 Task  6. 任务执行感知生命周期,可以跟随当前activity的生命周期结束而自动结束,并可以配置是否在重新打开activity时是否要重新执行 7. 任务执行可选主线程还是子线程 8. 任务执行可以选择 需要网络或者不需要网络 9. 任务执行可以选择网络制式4G 或者wifi下执行(5.0以上特性) 10.任务可以选择在充电时执行(5.0以上特性) 11. 任务执行可以随时取消,可以取消所有当前任务 目前框架已经做到前7项计划,后续将逐渐完善。 代码演示 1. 顺序执行代码 代码 效果 顺序执行效果图 2. 并发执行 并且分别延迟1秒,3秒 代码 效果 并发效果图 3. 等待执行 代码 效果 等待效果...
zb1500427248653 发布于 1个月前 阅读 1544 点赞 1

浅谈Hybrid

Android web开发入门篇
Android小闹 发布于 2个月前 阅读 2006 评论 4 点赞 6

Android 桌面加载图标过程分析

### 桌面应用图标流程 #### 前言 本人工作上碰到这么一个需求,开发一款滤镜引擎,将桌面上所有的图标进行统一的滤镜化,这就需要了解一下整个桌面去取图标的过程,了解了整个过程,找到真正拿图标的地方,在真正取图标的地方将图片进行替换,或者滤镜化,之前分析情况,现在整理下,与大家分享。**本文所用的代码,是基于Android 5.1** #### 桌面组件介绍 ![一级页面](https://static.oschina.net/uploads/img/201707/25114347_zV1r.png "一级页面") - 一级菜单 - **WorkSpace**:他是一个ViewGroup,要想在桌面上显示东西,就得往这个ViewGroup里添加自己的View - **BubbleTextView**:他是一个TextView,上方是图标,下方是名称,在桌面上的图标都是由这个类表示 - **FolderIcon**:他也是一个ViewGroup,用来表示桌面上的文件夹图标,里面添加了缩略处理过的bitmap,他的背景图片就是文件夹的形状 - **HotSeat**: 他是个FrameLayout,是桌面下方的固定快捷区,包含了几个常用的图标,中间的AllApp按钮是固定位置,也是一个TextView ![抽屉桌面](https://static.oschina.net/uploads/img/201707/25114317_XbLg.png "抽屉桌面") - 抽屉页面 组件 - **PagedView**:他是一...
蔡小鹏 发布于 2个月前 阅读 1665 评论 8 点赞 4

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

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

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

我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
CoorChice 发布于 3个月前 阅读 4682 评论 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() 怎么画?...
量子 发布于 3个月前 阅读 2441 评论 25 点赞 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...
瞎折腾 发布于 3个月前 阅读 770

用两张图告诉你,为什么你的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 发布于 4个月前 阅读 6547 评论 44 点赞 26 打赏 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 发布于 5个月前 阅读 1690 评论 7 点赞 3

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

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

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

想要开发一个 PWA(Progressive Web App)应用,你必须知道首先知道,Service Worker 是什么,他是怎么工作的。
kymjs张涛 发布于 7个月前 阅读 2803 评论 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...
业界小白 发布于 7个月前 阅读 1146 评论 1 点赞 1

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

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

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

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

Lua与ObjC的交互

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

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

Jenkins构建iOS项目 自动拉取GitHub/SVN 上传到fir/蒲公英
她吃西红柿 发布于 10个月前 阅读 3045 评论 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 发布于 10个月前 阅读 3134 评论 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 发布于 10个月前 阅读 2691 评论 6 点赞 2

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

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