技术前沿网

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

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

波浪式图,最好在用的时候加个随机数,这样不会就不至于这么死板了
LiYaoPeng 发布于 1周前 阅读 195 评论 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 发布于 1周前 阅读 162

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

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

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

图片处理 图片压缩
w_sen 发布于 1周前 阅读 299 点赞 1

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

GCD定时器,计时器button 的封装
LiYaoPeng 发布于 1周前 阅读 69

如何区分开源许可证

### 区分方法 ``` 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 发布于 2周前 阅读 85 评论 2

Android 输入法详解

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

Android WebView实现js与java交互

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

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:/...
她吃西红柿 发布于 3周前 阅读 1887 点赞 2

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

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

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

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

Spring boot with Hive

spring boot 1.5.6 + hive 2.3.0 + hadoop 2.5.0 + hbase 1.3.1
neo-chen 发布于 1个月前 阅读 113

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

首先解释React前后端同构、React首屏渲染的概念。然后通过这2个概念解决服务端渲染完成后浏览器端重复渲染的问题。
随风溜达的向日葵 发布于 1个月前 阅读 1660 评论 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个月前 阅读 345 评论 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个月前 阅读 3350 评论 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个月前 阅读 1562 点赞 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个月前 阅读 1325 评论 3 点赞 3

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

Instrument是Xcode自带的性能分析工具,这篇文章介绍其中的一个Time Profiler工具,找到APP中的性能瓶颈,并且去优化这个性能问题。
aron1992 发布于 2个月前 阅读 183 点赞 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支持动态缓存页面内容,通过客户端和服务端遵守一定的格式规范,每次请...
腾讯开源 发布于 2个月前 阅读 451 评论 1

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

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

长按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个月前 阅读 194 评论 5

Android------底部导航栏BottomNavigationBar

Android 的底部导航栏 BottomNavigationBar 由Google官方Material design中增加的。 Android底部导航栏的实现方式特别多,例如TabHost,TabLayout,或者TextView等,都可以实现底部导航栏的效果。 但Google既然推出了还是可以尽量用他来实现底部导航栏这样的功能。 下来看看案例效果图                 使用添加依赖 compile 'com.ashokvarma.android:bottom-navigation-bar:1.3.0' 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zhangqie.bottomnavigationbar.MainActivity"> <FrameLayout android:id="@+id/fragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <com.ashokvarma.bottomnavigation.BottomNavigationBar ...
切切歆语 发布于 5小时前 阅读 5

关于android应用allowbackup可能造成的漏洞的一些思考

问题不多说了,可看网址http://www.91ri.org/12500.html的介绍。 从技术的角度,解决方案我上我目前想到的就是下面这个方法。这里做个记录。 1、每个涉及到用户信息的请求,app的请求接口都需要带上当前设备的唯一设备标识码,如果服务端检测当前传过来的设备唯一标识码和上一次自己保存的标识码不一致,那么接口返回要求用户重新登录,这样便限制了攻击者在不需要登录的情况下,直接通过备份恢复的方法来窃取数据的可能。 这个问题,我有个没想明白的是,难道谷歌没想过会出现这种漏洞吗?
mgic 发布于 3个月前 阅读 8

Gradle 编译成功Apk以后, 对使用脚本对apk进行部分处理

遇到一个需求, 在打出apk以后, 需要使用x509对apk进行签名, 之前都是把apk copy到一个地方再签名, 很麻烦, 于是使用gradle做了一个自动化的命令 void signHisense() { println("sign >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") String rootPath = rootProject.projectDir.absolutePath; String targetPath = rootPath + "/tftest" File outputFile = new File(targetPath+ "/build/outputs/apk/tftest-debug.apk") String signPath = rootPath + "/kktv_sdk_manuf_hisense/ext/" String a = "java -jar " + signPath + "signapk.jar " + signPath + "platform.x509.pem " + signPath + "platform.pk8 " String signedPath = outputFile.absolutePath + ".signed.apk"; String cmd = a + outputFile.absolutePath + " " + signedPath; println("cmd:" + cmd) Process p = cmd.execute() p.waitFor() // File signedFile = new File(signedPath); // outputFile.delete(); // signedFile.renameTo(outputFile); } build.doLast { println "sign " + tv if (tv == "kktv_sdk_manuf_hisense") { signHisense()...
SuShine 发布于 4小时前 阅读 4

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Android BLE蓝牙详细解读(三)

由于上半年公司发展迅猛,空闲时间有限,转眼已几个月未更新文章了,但是期间本人还是优化了一些蓝牙库中的接口,包括增加了OTA升级接口、连接超时提醒等接口、自定义注解代替之前的枚举(设备连接状态等)、解决了蓝牙管理类的连接设备数量错误BUG等等,接着上篇BLE蓝牙详细解读咱们继续,未看过的朋友可以先去参考Android BLE蓝牙详细解读(二)。 下面主要分析本人蓝牙库中的蓝牙操作: 1、BluetoothLeService类是整个蓝牙的核心功能实现,BleManager是对外提供所有蓝牙操作接口的管理类,当BluetoothLeService处理之后要把结果返回到BleManager中,然后再由BleManager对外提供接口,他们之间通过handler进行连接起来,如下: private final ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder service) { mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService(); if(mHandler != null){ mBluetoothLeService.setHandler(mHandler); } Log.e(TAG, "Se...
微笑的江豚 发布于 2周前 阅读 9
珲少

将iOS项目进行子工程化

使用静态库或动态库来将开发中的独立模块抽离的方法。
珲少 发布于 2个月前 阅读 596 评论 7 点赞 1

Android零基础入门第71节:CardView简单实现卡片式布局

CardView被包装为一种布局,作为一种容器使用,相当于FragmentLayout布局控件然后添加圆角及阴影的效果。
鑫鱻 发布于 4小时前 阅读 3

Android MaterialDesign 之 百分比布局

百分比布局可以轻松解决Android手机适配问题,这就类似于H5中的百分比布局 使用Android studio在build.gradle添加以下信息就可以获取支持库 compile 'com.android.support:percent:22.2.0' 百分比布局比较简单直接看代码就可以了 两种布局: 1、PercentRelativeLayout <?xml version="1.0" encoding="utf-8"?> <android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.us.androiddesign.percentlayout.PercentRelativeActivity"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:background="#7700ff00" android:text="width:70%;height:20%" app:layout_heightPercent="20%" app:layout_widthPercent="70%" android:gravity="center" /> <TextView android:layou...
Mathy_h 发布于 3小时前 阅读 2

BaseRecyclerViewAdapterHelper 使用注意

一些使用BaseRecyclerViewAdapterHelper的注意事项
火云 发布于 1个月前 阅读 36

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

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

[日推荐]『旅行翻译』不懂外语也能走遍天下!

![](http://upload-images.jianshu.io/upload_images/5615783-39b2b4608d4799b6.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 难得的国庆&中秋长假,国内旅游人太多,不如出国玩玩,但是,不懂外语怎么办?没关系,这个[小程序](http://www.wxapp-union.com/)来帮你—— # [**旅行翻译**](http://store.dreawer.com/wxapp/lv-xing-fan-yi.html) ![](http://image.dreawer.com/images/app/2017-03-03_58b93432075ff.jpg) >简介:旅行翻译是能为用户提供便捷的翻译功能小程序应用,旅行翻译界面简洁使用方便,是旅游出行的最佳选择。 ![](http://upload-images.jianshu.io/upload_images/5615783-51f2a5b8f2e6bba9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)![](http://upload-images.jianshu.io/upload_images/5615783-11cbe8ed46c11932.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >旅行翻译小程序用法简单明了,输入你想表达的内容即可翻译成你以选择的语种。如果需要切换语种就点击旅行翻译小程序右上角的“中译英”文字样式即可切换翻译语种。你还可以将翻译过的内容收藏起来,这样在下次遇到时就可以省去输入环节直接使用了...
小程序社区 发布于 2小时前 阅读 2
极光推送

React Native 轻松集成分享功能(iOS 篇)

产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个[插件](https://github.com/jpush/jshare-react-native)分享给大家。 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台)。支持的平台如下: - [微信开放平台](https://open.weixin.qq.com) - [QQ 开放平台](http://open.qq.com/) - [微博开放平台](http://open.weibo.com/) ## 第一步 安装: 在你的项目路径下执行命令: ``` npm install jshare-react-native --save npm install jcore-react-native --save react-native link ``` ## 第二步:配置 ### 配置 info.plist 在 info.plist 文件中添加如下键值对 ```xml LSApplicationQueriesSchemes wechat weixin sinaweibohd sinaweibo sinaweibosso weibosdk weibosdk2.5 mqqapi mqq mqqOpensdkSSoLogin mqqconnect mqqopensdkdataline mqqopensdkgrouptribeshare mqqopensdkfriend mqqopensdkapi mqqopensdkapiV2 mqqopensdkapiV3 mqqopensdkapiV4 mqzoneopensdk wtloginmqq wtloginmqq2 mqqwpa mqzone mqzonev2 mqzoneshare wtloginqzone mqzonewx mqzoneopensdkapiV2 mqzoneopensdkapi19 mqzoneop...
极光推送 发布于 1周前 阅读 19

Android N在通知栏上实现直接回复消息

Android N 版本中的通知又做了进一步的改进。主要改进了如下几点: - 新的 UI 效果 - 增强对自定义 View 的支持 - 支持通知内直接回复 - 新的 MessagingStyle 样式通知 - 聚合通知 同一类型通知可以聚合一起了,再也不用担心用户手机满屏都是通知了 刚好,我司的app是一款社交类型的app,为了适配Android N的这些特性,于是花了点时间给自己的app加上了通知栏直接回复的功能。直接上代码: ```java public static void sendNotification(Context context, String tickerText, String title, String content, Intent intent, String user, int notifyId) { // 初始化NotificationManager NotificationManager messageNotificatioManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); // 创建通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setTicker(content); builder.setContentInfo(tickerText); builder.setContentText(content); builder.setContentTitle(title); builder.setSmallIcon(R.drawable.icon_push); builder.setAutoCancel(true); // 设置通知的优先级(悬浮通知) bui...
shenhuniurou 发布于 3个月前 阅读 24

Linux I2C核心和设备驱动简要介绍

本章导读 I2C总线仅仅使用SCL、SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。因此,I2C总线非常广泛地应用在EEPROM、实时时钟、小型LCD等设备与CPU的接口中。 Linux系统定义了I2C驱动体系结构。在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的I2C框架。 Linux I2C体系结构 Linux的I2C体系结构分为3个部分组成。 (1) I2C核心 I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即Algorithm)上层的与具体设备无关的代码以及探测设备、检测设备地址的上层代码等,如下图所示。 (2) I2C总线驱动 I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。 I2C总线驱动主要包含I2C适配器数据结构i2c_adapter、I2C适配器的Algorithm数据结构i2c_algorithm和控制I2C适配器产生通信信号的函数。   经由I2C总线驱动的代码,我们可以控制I2C适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。 (3) I2C设备驱动 I2C设备驱动(也称为客户驱动)是对I2C硬件体系结...
幸福阶梯 发布于 2个月前 阅读 8

iOS 开发日常

开发记录
樱黯雨 发布于 21小时前 阅读 2

mac安装sshpass连接ssh

安装 下载源码 点我下载 使用终端cd到下载目录 解压到当前文件夹 tar -zxvf sshpass-版本号.tar.gz 进入解压后的文件夹 cd sshpass-版本号 开始源代码安装第一步检验环境 ./configure 编译源代码 sudo make&& sudo make install   第一次连接ssh需要多加一个参数 sshpass -p ssh密码 ssh -o StrictHostKeyChecking=no -p ssh端口号 ssh用户名@ssh地址 之后可以简单的使用 sshpass -p ssh密码 ssh -p ssh端口号 ssh用户名@ssh地址 sshpass -p 'Superid' ssh -p 22 root@192.168.1.200 sshpass -p 'Superid' ssh -o StrictHostKeyChecking=no  -p 22 root@192.168.1.200
清风徐来的生活 发布于 1个月前 阅读 47

libxcb 交叉编译

xcb-proto编译 交叉编译xcb-proto,下载地址https://xcb.freedesktop.org/dist/ 使用的是1.6版本 CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ ./configure --prefix=/home/huey/Dev/Arm/xcb-proto --host=arm-linux make make install export PKG_CONFIG_PATH=/home/huey/Dev/Arm/xcb-proto/lib/pkgconfig     libxcb 编译 下载地址 https://xcb.freedesktop.org/dist/ 使用的是 1.5版本,该版本要求xcb-proto 版本大于1.5 ,并且要求x11支持   CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ ./configure --prefix=/home/huey/Dev/Arm/xcb --host=arm-linux make make install   可能遇到的问题 1、需要xslproc sudo apt-get install xsltproc 2、缺少x11 需要交叉编译x11 也可以从网上找一个现成的 http://download.csdn.net/detail/cloudjx/9884034 然后在configure时加上 CPPFLAGS="-I/home/huey/Dev/Arm/x11/include" LDFLAGS="-L/home/huey/Dev/Arm/x11/lib"  ...
cloudjx 发布于 3个月前 阅读 21

swift - iOS苹果内购

import UIKit import StoreKit//内购头文件 //内购代理SKPaymentTransactionObserver,SKProductsRequestDelegate class AttritionBuyTableViewController: UITableViewController ,SKProductsRequestDelegate,SKPaymentTransactionObserver{ //沙盒测试环境验证 let SANDBOX = "https://sandbox.itunes.apple.com/verifyReceipt" //正式环境验证 let AppStore = "https://buy.itunes.apple.com/verifyReceipt" var productDict:NSMutableDictionary? let dataArr = ["12元购买"] override func viewDidLoad() { super.viewDidLoad() self.navigationItem.title = "消耗性内购测试" self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") SKPaymentQueue.default().add(self)//添加监听 } deinit { SKPaymentQueue.default().remove(self)//移除监听 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be r...
WayOnlyWay 发布于 2个月前 阅读 8

基于viewpager的启动页界面代码实现

class GuideActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_guide_kt) viewPager.adapter = GuideAdapter(getViewDatas()) } class GuideAdapter(val list: List) : PagerAdapter() { override fun getCount(): Int { return list.size } override fun isViewFromObject(view: View?, `object`: Any?): Boolean { return view == `object` } override fun instantiateItem(container: ViewGroup?, position: Int): Any { container!!.addView(list.get(position)) return list.get(position) } override fun destroyItem(container: ViewGroup?, position: Int, `object`: Any?) { container!!.removeView(list.get(position)) } } /** * viewpager最后一页 */ fun getLastView(): View { val rootView = View.inflate(this@GuideActivity, R.layout.activity_guide_last_img_kt, null) Glide.with(this@GuideActivity).load(R.drawable.guide_3).into(rootView.find(R.id.last_img)) rootView.find(R.id.start_imgBtn).setOnClickListener { //基于业务的提示弹框 ...
GoldenVein 发布于 1个月前 阅读 8

Android BLE蓝牙详细解读(一)

本文主要讲解Android低功耗蓝牙的api使用以及蓝牙扫描、连接、发送数据、接收数据等一系列操作,本篇结尾有本人封装的BleLib蓝牙库,非常适合蓝牙初学者使用,只需要一行代码注入就OK了,而且用法也极其简单,我会在第二篇中专门讲解一下BleLib库的使用。 在BLE协议中,有两个角色,周边(Periphery)和中央(Central);周边是数据提供者,中央是数据使用/处理者,一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。 首先使用蓝牙就不得不说BluetoothGatt和BluetoothGattCallback这两个类,该类继承自BluetoothProfile,BluetoothGatt作为中央来使用和处理数据,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallback,BluetoothGattCallback返回中央的状态和周边提供的数据。 我们蓝牙操作的主要目的就是为了拿到中央BluetoothGatt这个对象,进而进行接下来的所有一系列操作,如下: 1.先拿到BluetoothManager:bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 2.再拿到BluetoothAdapt:btAdapter = bluetoothManager.getAdapter(); 3.开始扫...
微笑的江豚 发布于 2周前 阅读 3

Alamofire4.x开源代码分析(三)文件上传下载

Alamofire支持下载图片到内存或者磁盘,Alamofire.request开头的请求会把数据加载进内存,适用于小文件,如果文件比较大,可能会造成内存溢出.因此如果文件比较大,应该是Alamofire.download方法,把数据临时的保存在磁盘中,该方法同时还支持后台下载. 例如 ``` Alamofire.download("https://httpbin.org/image/png").responseData { response in if let data = response.result.value { let image = UIImage(data: data) } } ``` 框架提供了DownloadFileDestination,来允许自定义destinationURL,DownloadOptions这两个属性,如果不指定Destination,文件将被下载到temporaryURL.我们来看看这个闭包的结构 ``` public typealias DownloadFileDestination = ( _ temporaryURL: URL, _ response: HTTPURLResponse) -> (destinationURL: URL, options: DownloadOptions) //options包含的枚举 .createIntermediateDirectories//根据路径来创建文件夹 .removePreviousFile//移除当前路径的旧文件 ``` 通过例子来试一下 ``` let destination: DownloadRequest.DownloadFileDestination = { _, _ in let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomai...
她吃西红柿 发布于 3个月前 阅读 53

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

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

【整理】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 系...
冰泪_ 发布于 1周前 阅读 524

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:/...
她吃西红柿 发布于 3周前 阅读 1887 点赞 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个月前 阅读 3350 评论 4 点赞 6

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

图片处理 图片压缩
w_sen 发布于 1周前 阅读 299 点赞 1
编辑部的故事

给 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个月前 阅读 8439 评论 17 点赞 23
珲少

将iOS项目进行子工程化

使用静态库或动态库来将开发中的独立模块抽离的方法。
珲少 发布于 2个月前 阅读 596 评论 7 点赞 1

Android 输入法详解

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

在Kotlin学习中遇到的坑

Kotlin开发是未来Android开发的一种趋势,不少公司也开始用Kotlin来重构项目。在业余时间,我自学了Kotlin,在kotlin的使用中也遇到不少坑,所以简单总结了一下,以后遇到问题会一一补上来。 1. 创建第一个纯粹的kotlin项目遇到的坑: 1.1 在创建Kotlin项目的最后一个步骤,选择Add no Activity,点击创建成功。 1.2 针对这种情况,有两个地方需要改:gradle配置和AndroidMainfest,我就是在这两个地方出了错,报的错都是“Error.Execution failed for task':app:processDebugResources'.>” 1.3 解决方法 A.在project的gradle配置加上 buildscript { ext.kotlin_version = "1.0.4" repositories { ... } dependencies { ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } ... B.在Module的gradle配置加上 ... apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { ... defaultConfig { ... } buildTypes { ... } } dependencies { ... compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" c...
人生若只如初键 发布于 3天前 阅读 15

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个月前 阅读 162
编辑部的故事

给 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个月前 阅读 7042 评论 12 点赞 12
neo-chen

Spring boot with Elasticsearch 5.5.1

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

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

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

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

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

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

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

android studio 一直卡在Gradle:Build Running的解决办法

方法1: 1、在C:\User\<用户名>\.gradle 目录下新建一个gradle.properties文件,并在里面添加一行:org.gradle.daemon=true 2、打开AS,在Settings中设置Gradle的工作模式为offline,如下图:   这样就可以解决一直在running的问题了 方法2:         找到路径C:\Users\admin\.gradle\wrapper\dists,在此文件夹下有一个gradle版本文件夹,打开后是一个名字很长的文件夹, 例如我的C:\Users\admin\.gradle\wrapper\dists\gradle-2.4-all\6r4uqcc6ovnq6ac6s0txzcpc0   然后下载对应版本的gradle,将下载的压缩包直接放进名字很长的文件夹中即可,不需要解压   方法3:   需要在android studio 中配置gradle的代理,当然是用goagent了。 打开setting->gradle->Gradle VM Options: -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8087 设置生成功后,重启androidstudio ,速度会非常快。 方法4: 1)进入刚安装的Android Studio目录下的bin目录。找到idea.properties文件,用文本编辑器打开。 2)在idea.properties文件末尾添加一行: disable.android.first.run=true ,然后保存文件。 3)关闭Android Studio后重新启动,便可进入界面。...
百特曼 发布于 2个月前 阅读 84

ThinkSNS Plus 1.0.0-alpha.7 发布,基于 Laravel 的用户生态系统

距离上次 alpha.6 发布过了很久了,这次发布的内容如下: **Core** 升级 laravel 到 5.5 验证码等数据模型使用独立工厂 增加极光推送支持 用户关注推送关注消息 jwt 状态友好的异常处理 持续集成增加 PHP 7.2 测试 **APIs** 支持第三方登录用户重置密码 增加用户推荐接口 增加极光推送触发 hook 增加找人接口 购买付费节点增加返回购买者信息 增加用户排行榜功能 增加禁用用户登录判断功能 增加用户认证接口 增加 pc 支付节点 **后台管理** 增加过滤词功能管理 敏感词管理列表 验证码管理设置 短信管理设置 钱包增加明细筛选 增加广告管理 增加用户认证管理 增加站点配置 增加金币管理 增加用户注册管理 增加打赏管理 优化后台时间展示,utc 转 本地化时间显示 **文档** 增加错误消息列举 修复安装错误的文档描述 独立文档网站发布 **文档网站** 因为 ThinkSNS Plus 文档和应用文档太过分散,所以我们特意开发了一个漂亮且友好支持手机访问的纯静态文档网站。 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25161134_d4wn.png "在这里输入图片标题") ![输入图片说明](https://static.oschina.net/uploads/img/201709/25161144_AHpX.png "在这里输入图片标...
ThinkSNS账号 发布于 4天前 阅读 11

Android------第一次启动出现白屏或者黑屏

APP开发中,第一次运行启动app时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示。 当打开一个Activity时,如果这个Activity所属Application还没有在运行, 系统会为这个Activity的创建一个进程(每开启一个进程都会有一个Application,所以Application的onCreate()可能会被调用多次), 但进程的创建与初始化都需要时间,在这个动作完成之前,如果初始化的时间过长,屏幕上可能没有任何动静; 这样看起来就像Activity已经启动起来了,只是数据内容还没有初始化好。   简单的代码解决问题: 创建一个res/drawable下新建一个layer-list, backsplash.xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/white" /> <item> <bitmap android:gravity="center" android:src="#" /> </item> </layer-list> 然后 <style name="SplashTheme" parent="AppTheme"> <!-- 将splash图片设置在这,这样这张图片取代白屏 --> <item name="android:windowBackground">@drawable/backspla...
切切歆语 发布于 3天前 阅读 9

Android WebView实现js与java交互

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

Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析

1  背景 之所以写这一篇博客的原因是因为之前有写过一篇《Android应用setContentView与LayoutInflater加载解析机制源码分析》, 然后有人在文章下面评论和微博私信中问我关于Android应用Activity、Dialog、PopWindow加载显示机制是咋回事,所以我就写一 篇文章来分析分析吧(本文以Android5.1.1 (API 22)源码为基础分析),以便大家在应用层开发时不再迷糊。 PS一句:不仅有人微博私信我这个问题,还有人问博客插图这些是用啥画的,这里告诉大家。就是我,快来猛戳我 还记得之前《Android应用setContentView与LayoutInflater加载解析机制源码分析》这篇文章的最后分析结果吗?就是如下这幅图: 在那篇文章里我们当时重点是Activity的View加载解析xml机制分析,当时说到了Window的东西,但只是皮毛的分析了Activity相关的一些逻辑。(PS:看到这不清楚上面啥意思的建议先移步到《Android应用setContentView与LayoutInflater加载解析机制源码分析》,完事再回头继续看这篇文章。)当时给大家承诺过我们要从应用控件一点一点往下慢慢深入分析,所以现在开始深入,但是本篇的深入也只是仅限Window相关的东东,之后文章还会继续慢慢深入。 2  浅析Window与WindowManager相关...
微笑的江豚 发布于 4天前 阅读 10

开发Countly plugin 的7个关键

Countly基于插件式的架构, 让客户方便做二次开发,如针对自己商务模式的插件。这篇文章提供以下的实战的开发路线图助于你参考。
TanJx 发布于 4天前 阅读 11

[日推荐]『旅行翻译』不懂外语也能走遍天下!

![](http://upload-images.jianshu.io/upload_images/5615783-39b2b4608d4799b6.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 难得的国庆&中秋长假,国内旅游人太多,不如出国玩玩,但是,不懂外语怎么办?没关系,这个[小程序](http://www.wxapp-union.com/)来帮你—— # [**旅行翻译**](http://store.dreawer.com/wxapp/lv-xing-fan-yi.html) ![](http://image.dreawer.com/images/app/2017-03-03_58b93432075ff.jpg) >简介:旅行翻译是能为用户提供便捷的翻译功能小程序应用,旅行翻译界面简洁使用方便,是旅游出行的最佳选择。 ![](http://upload-images.jianshu.io/upload_images/5615783-51f2a5b8f2e6bba9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)![](http://upload-images.jianshu.io/upload_images/5615783-11cbe8ed46c11932.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >旅行翻译小程序用法简单明了,输入你想表达的内容即可翻译成你以选择的语种。如果需要切换语种就点击旅行翻译小程序右上角的“中译英”文字样式即可切换翻译语种。你还可以将翻译过的内容收藏起来,这样在下次遇到时就可以省去输入环节直接使用了...
小程序社区 发布于 2小时前 阅读 2

AlertDialog源码简析

// 部分代码省略 /** * Dialog父类 */ public class Dialog { public void show() { // ... 省略代码 if (!mCreated) { dispatchOnCreate(null); // onCreat、View相关代码 } else { final Configuration config = mContext.getResources().getConfiguration(); mWindow.getDecorView().dispatchConfigurationChanged(config); } onStart(); // onStart 方法 mDecor = mWindow.getDecorView(); WindowManager.LayoutParams l = mWindow.getAttributes(); if ((l.softInputMode & WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) == 0) { WindowManager.LayoutParams nl = new WindowManager.LayoutParams(); nl.copyFrom(l); nl.softInputMode |= WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION; l = nl; } mWindowManager.addView(mDecor, l); // 将mDecor显示到屏幕上 mShowing = true;...
t_yapeng 发布于 2小时前 阅读 1

[日推荐]『旅行云清单』列好清单,准备出发!

![](http://upload-images.jianshu.io/upload_images/5615783-679ed8bd49695474.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 国庆长假倒计时啦,再上两天班,就可以出去浪罗!,听说有的小伙伴今天下班就可以开启度假模式了,那么,你的行李收拾得怎么样了?可别落下什么东西哦!不如列个旅行清单吧。 # [**旅行云清单**](http://store.dreawer.com/wxapp/lv-xing-yun-qing-dan.html) ![](http://image.dreawer.com/resource/wxapp/images/78AF0B8A703ADFCC80AEB59B8459370B.jpg) >**简介:**“旅行云清单” —— 一款旅行整理清单的[小程序](http://www.wxapp-union.com/) 读懂你的旅行习惯,推荐实用旅行单品, 定制你的“云端”旅行整理清单。 必备旅行单品,轻松一键购买, 变身旅行达人,旅途倍添舒适! ![](http://image.dreawer.com/resource/wxapp/images/C3F8490A9A0E2BA80DB1B5523419CF74.jpg)![](http://image.dreawer.com/resource/wxapp/images/96ADE3DC3297EB6D3AB4488D4B0A2F9B.jpg) >根据你的旅行类型、出行方式、人员等信息,自动生成旅行清单,帮你列出所有旅行所需的用品,还有好物推荐,让你的假期再无后顾之忧! ![](http://image.dre...
小程序社区 发布于 3小时前 阅读 1

Android MaterialDesign 之 百分比布局

百分比布局可以轻松解决Android手机适配问题,这就类似于H5中的百分比布局 使用Android studio在build.gradle添加以下信息就可以获取支持库 compile 'com.android.support:percent:22.2.0' 百分比布局比较简单直接看代码就可以了 两种布局: 1、PercentRelativeLayout <?xml version="1.0" encoding="utf-8"?> <android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.us.androiddesign.percentlayout.PercentRelativeActivity"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:background="#7700ff00" android:text="width:70%;height:20%" app:layout_heightPercent="20%" app:layout_widthPercent="70%" android:gravity="center" /> <TextView android:layou...
Mathy_h 发布于 3小时前 阅读 2

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

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

Android零基础入门第71节:CardView简单实现卡片式布局

CardView被包装为一种布局,作为一种容器使用,相当于FragmentLayout布局控件然后添加圆角及阴影的效果。
鑫鱻 发布于 4小时前 阅读 3

Gradle 编译成功Apk以后, 对使用脚本对apk进行部分处理

遇到一个需求, 在打出apk以后, 需要使用x509对apk进行签名, 之前都是把apk copy到一个地方再签名, 很麻烦, 于是使用gradle做了一个自动化的命令 void signHisense() { println("sign >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") String rootPath = rootProject.projectDir.absolutePath; String targetPath = rootPath + "/tftest" File outputFile = new File(targetPath+ "/build/outputs/apk/tftest-debug.apk") String signPath = rootPath + "/kktv_sdk_manuf_hisense/ext/" String a = "java -jar " + signPath + "signapk.jar " + signPath + "platform.x509.pem " + signPath + "platform.pk8 " String signedPath = outputFile.absolutePath + ".signed.apk"; String cmd = a + outputFile.absolutePath + " " + signedPath; println("cmd:" + cmd) Process p = cmd.execute() p.waitFor() // File signedFile = new File(signedPath); // outputFile.delete(); // signedFile.renameTo(outputFile); } build.doLast { println "sign " + tv if (tv == "kktv_sdk_manuf_hisense") { signHisense()...
SuShine 发布于 4小时前 阅读 4

Android------底部导航栏BottomNavigationBar

Android 的底部导航栏 BottomNavigationBar 由Google官方Material design中增加的。 Android底部导航栏的实现方式特别多,例如TabHost,TabLayout,或者TextView等,都可以实现底部导航栏的效果。 但Google既然推出了还是可以尽量用他来实现底部导航栏这样的功能。 下来看看案例效果图                 使用添加依赖 compile 'com.ashokvarma.android:bottom-navigation-bar:1.3.0' 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zhangqie.bottomnavigationbar.MainActivity"> <FrameLayout android:id="@+id/fragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <com.ashokvarma.bottomnavigation.BottomNavigationBar ...
切切歆语 发布于 5小时前 阅读 5

Eclipse和Android Studio自定义Dialog样式的定义

适用于Eclipse并且活动继承Activity ``` ``` 适用于Android Studio并且活动继承AppCompatActivity ``` ```
yuewawa 发布于 15小时前 阅读 5

iOS 11中APP中tableView内容下移20pt或下移64pt的问题适配的一个总结

阅读 1753 收藏 43 2017-09-13 原文链接:www.jianshu.com 导语:本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。内容包括五个部分:问题的原因分析、adjustContentInset属性的计算方式、什么情况下的tableView会发生内容下移、有哪些解决方法、解决这个问题时遇到的另外一个小问题。 一、iOS 11下APP中tableView内容下移20pt或下移64pt的原因分析 问题如下图所示: 问题.png 1. 原因分析 原因是iOS 11中Controller的automaticallyAdjustsScrollViewInsets属性被废弃了,所以当tableView超出安全区域时系统自动调整了SafeAreaInsets值,进而影响adjustedContentInset值,在iOS 11中决定tableView的内容与边缘距离的是adjustedContentInset属性,而不是contentInset。adjustedContentInset的计算方式见本文第二部分内容。因为系统对adjustedContentInset值进行了调整,所以导致tableView的内容到边缘的距离发生了变化,导致tableView下移了20pt(statusbar高度)或64pt(navigationbar高度)。 如果你的APP中使用的是自定义的navigationbar,隐藏掉系统的navigationbar,并且tableView的frame为(0,0,SCREEN_WIDTH, SCREEN_HEIGHT)开始,那...
干干 发布于 15小时前 阅读 2

最新iOS 11 & iPhone X适配方案传送门:10分钟适配 iOS11 & iPhoneX

发现问题 升级Xcode 9 + iOS 11后,发现原本没问题的collectionView和tableView像是中了风一样,头部刷新UI出现了错乱。 查阅发现 iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它 关于 contentInsetAdjustmentBehavior @available(iOS 11.0, *) public enum UIScrollViewContentInsetAdjustmentBehavior : Int { case automatic // Similar to .scrollableAxes, but will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewContentInset = YES inside a navigation controller, regardless of whether the scroll view is scrollable case scrollableAxes // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES) case never // contentInset is not adjusted case always // contentInset is always adjusted by the scroll view's safeAreaInsets } UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,...
干干 发布于 15小时前 阅读 1

UIViewController各个方法的加载顺序

加载过程 加载第一步       - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil      //根据nib文件实例化UIViewController    // 这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. //如果你的对象是UIViewControler的子类,那么你必须调用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;方法去调用NIB文件初始化自身,即使那没有使用nib文件也会调用这个函数(默认 情况下init方法已经为你的做这件事情了),如果你调用这个方法,并传递的两个参数为空(nil),然后类会调用-loadView去读取一个名字和你 的UIViewController名字相同的nib文件,来初始化自身。如果没有这样的nib文件,你必须调用-setView:来设置一个 self.view。或者重载-loadView 方法  加载第二步     - (void)loadView     当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。    如果手工维护views,必须重载重写该方法    如果使用IB维护views,必须不能重载重写该方法    loadView和IB构建view    作用:在需要用程序自定义view时重...
干干 发布于 15小时前

深入了解控制器View的加载

 作者 喵子G 关注 2017.03.16 12:56* 字数 2113 阅读 450评论 1喜欢 6 一,非storyboard下的控制器View加载 1,加载过程中的方法调用顺序 - (instancetype)init; - (instancetype)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle )nibBundleOrNil; - (void)loadView; - (void)viewDidLoad; - (void)viewWillAppear:(BOOL)animated; - (void)viewDidAppear:(BOOL)animated;   无论是有xib关联的控制器还是纯代码的控制器,都会走完这些方法。 2,view加载的规律 1:有xib的控制器,加载他的view的时候,在viewWillAppear方法的时候,self.view的frame才是对应屏幕的尺寸,在它之前的方法中self.view的尺寸都是xib的view的尺寸。即有xib的控制器,viewDidLoad中xib的view的frame是不准确的。(没有xib的纯代码的控制器,self.view.frame是准确的) 2:有xib的控制器,重写loadView方法会使控制器不能加载到xib的view,如果一定要重写loadView方法,那么控制器的初始化就要用initWithNibName方法:[[JKRViewController alloc] initWithNibName:@"JKRViewController" bundle:nil];这样就能同时使用xib,还能重写loadView方法。但是这样的话,init方法就不会被...
干干 发布于 15小时前

Android依赖库---AAR文件

创建和引用Android依赖库---AAR文件
Code工作室 发布于 16小时前 阅读 6

如何在三年内快速成长为一名技术专家

本文是首发在GitChat上的一篇付费文章   工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在我们公司有些同学在前三年中就快速成为某一个领域的技术专家,有些同学也可能止步不前。本文和大家一起探讨下如何在三年内快速成长为一名技术专家。   学习方法   掌握良好的学习心态 掌握系统化的学习方法 知识如何内化成能力 广度和深度的选择   实战技巧   你需要学会的编码习惯 在业务团队做开发如何成长 掌握良好的学习心态 空杯心态 首先要有空杯的学习心态,而不是傲娇自满,故步自封,空杯子才可以装下更多的东西。学会取百家之长,带着欣赏的眼光看团队的同事或学校的同学,欣赏每位同事或同学的优点,然后吸取他们的优点,每个同事都有其擅长的能力,比如有的同事技术能力强,那么可以观察下他如何学习的(或者找他请教学习方法),有的同学擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?如果他解决不了时,他是如何寻求帮助。有的同学擅长使用IDE或MAC的快捷键,那么可以向他学习提高工作效率。有的同学能快速理解业务知识,观察他是如何做到的,自己如何达到他的程度。沟通能力,解决问...
勇恒 发布于 20小时前 阅读 8

iOS客户端防止发送重复点击发请求

iOS客户端防止发送重复点击发请求 iOS客户端经常遇到点击某个按钮发送一个请求到服务器,貌似一个非常简单的需求有的时候其实并不是那么简单,比如网络不好的时候,用户重复点击一个按钮会发送多次请求,比如在我负责的客户端来说用户发帖功能导致的弊端就是,一个用户对一个帖子回复了很多条,有的时候甚至达到了10多条,如何解决这一的问题呢。方案其实有很多。 利用MBProgressHud等控件 众所周知MBProgressHud或者SVProgresHud经常被利用在项目中,主要是在网络请求发起到网络相应收到的这段时间在客户端形成一个遮罩,可以用来阻止用户点击UI进行操作,防止某些意外的请求产生。 优点:解决了用户重复点击多次发送请求的问题,同时防止了在某些条件不具备的情况进行其他操作引发客户端出现问题的出现。 缺点:有的时候不人性化,比如用户进入某个界面就是网速不好,一直请求数据,等了好长时间都没有结果,这个时候用户一般都会下意识点击返回按钮,但是这种情况下,返回按钮的点击事件也是不起作用的。 利用运行时设置相应按钮点击间隔 1. 对UIControl进行扩展 该方案来自http://www.cocoachina.com/ios/20150828/13260.html @interface UIControl (delay) @property ...
法斗斗 发布于 20小时前 阅读 7

定制BottomNavigationView菜单项

开发时使用design的BottomNavigationView作为底部菜单 但发现默认的菜单图标被限定为24dp*24dp(bottom-navigation)   解决方法:    在工程中加入design_bottom_navigation_item.xml布局文件,如: <?xml version="1.0" encoding="utf-8"?> <!-- design 中的图标太小,这里定制了菜单 Moxun @ 2017-09-28 --> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" 这里原先是24dp android:layout_height="wrap_content" 这里原先是24dp android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/design_bottom_navigation_margin" android:layout_marginBottom="@dimen/design_bottom_navigation_margin" android:duplicateParentState="true" /> <android.support.design.internal.BaselineLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" android:clipToPa...
陌寻 发布于 20小时前 阅读 5

tableViewCell的左滑删除按钮

- 对编辑的状态下提交的事件响应 ``` - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {      } // 返回 @"          “; 控制按钮宽度 - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {     return @"          "; } ``` - 让表格可以修改,滑动可以修改 ``` - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {     return YES; } ``` - 自定义cell - 重写 layoutSubviews, 获取”UITableViewCellDeleteConfirmationView”,给它添加一个图片 ```` - (void)layoutSubviews {     for (UIView *subView in self.subviews) {         if([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {             UIView *shareConfirmationView = subView.subviews[0];             shareConfirmationView.backgroundColor = HexColor(0xe...
樱黯雨 发布于 21小时前 阅读 4

iOS 开发日常

开发记录
樱黯雨 发布于 21小时前 阅读 2

Mac电脑使用Android Studio进行真机调试

http://www.cnblogs.com/developer-wang/p/6719555.html
yizhichao 发布于 21小时前 阅读 7

jQuery插件

jQuery插件基本要点:  所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上. 在插件内部,this指向的是当前通过选择器获取的jQuery对象,而不是像一般方法那样,例如click()方法,内部的this指向的是dom元素 可以通过this.each来遍历所有元素 插件应返回一个jQuery对象,已保证插件可以链式操作.除非插件需要返回的是一些需要获取的量,例如字符串或者数组等 一.常见的插件结构 //注意为了更好的兼容性,开始前有个分号 ;(function($){//此处将$作为匿名函数的形参 /*这里放置代码,可以使用$作为就Query的缩写别名*/ })(jQuery); //这里就将就Query作为实参传递给匿名函数了 例: ;(function($){ //定义一个局部变量foo,仅函数内部可以访问,外部无法访问 var foo; var bar = function(){ /* 在匿名函数内部的函数都可以访问foo,即便是在匿名函数的外部调用bar()的时候,也可以在bar()的内部访问到foo,但在匿名 函数的外部直接调用foo是做不到的. */ } /* 下面的语句让匿名函数内部的函数bar()逃逸到全局可访问的范围内,这样就可以在匿名函数外部通过调用jQuery.BAR()来访问内部定义的函数bar(),并且内部函数bar()也...
Romanceling 发布于 22小时前 阅读 4

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

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

浅谈Hybrid

Android web开发入门篇
Android小闹 发布于 2个月前 阅读 2022 评论 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个月前 阅读 1675 评论 8 点赞 4

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

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

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

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

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

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

用两张图告诉你,为什么你的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个月前 阅读 6565 评论 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个月前 阅读 1698 评论 7 点赞 3

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

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

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

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

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

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

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

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

Lua与ObjC的交互

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

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

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

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

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