iOS官方开发文档翻译_2:Numbers, Data, and Basic Values

Work with primitive values and other fundamental types used throughout Cocoa.

在Cocoa中使用的基本数据类型和基于基本类型衍生的数据类型。

阅读更多
iOS官方开发文档翻译_1:Foundation

Foundation框架

Access essential data types, collections, and operating-system services to define the base layer of functionality for your app.

介绍基本数据类型,集合及系统服务以定义app底层方法。

阅读更多
Vultr服务器死马当活马医手记

说起这次经历有点哭笑不得,当初搭建的博客服务器时考虑到安全问题,关闭了root账户的远程登录(在这之前我也改了默认root密码),创建了个普通账户,修改了默认ssh的22端口,然后开启了sshkey登录的方式,想着反正都能直接登录,要用root再su切换过去呗,不用操心啥,过去了大半年后,电脑换了,原电脑也重装了系统,sshkey也没了,root又关了远程登陆,密码也忘了,创建的普通账户连账户名都忘了,这波坑自己真是。。。。优秀。

阅读更多
git flow开发流程及基本使用

总体流程图

总体流程图

阅读更多
Linux环境服务器部署Maven仓库Nexus

准备工作

下载最新版本Nexus安装包。
Nexus下载地址:https://www.sonatype.com/download-oss-sonatype

目前有Nexus Repository Manager OSS 3.xNexus Repository Manager OSS 2.x安装包,这里选择后者。

阅读更多
Android Studio上传组件模块到私有Maven库

创建仓库

进入Nexus管理可视化界面,登录。

点击以下图中的Repositories

阅读更多
SQLiteOpenHelper并发问题处理

这个问题我决定从一个IllegalStateException谈起。
当APP跑着跑着,不小心在操作数据库的时候,抛出了以下异常:

1
2
java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase:

阅读更多
Android Studio的logcat从窗口模式恢复

这是个比较奇怪的问题,困扰了我好几天,因为一次开发过程中手贱。。。。,进行了如下操作:

阅读更多
Android中对于WebView的高度计算问题

前面文章中说到过NestedScrollView中嵌套ViewPager的高度问题,之后的解决方案是通过获取ViewPager中内容的高度,然后设置ViewPager的高度来解决的。
那么,如果ViewPager中有一个WebView,这个时候高度计算就有点头疼。
至于WebView的高度计算,这里我通过JS方式来实现。

阅读更多
Android WebView之缓存清理

Android中使用混合模式开发的应用中,H5页面的缓存有时候需要手动强制清理,使用到强制清理的场景有两个:

  1. 用户手动点击清理缓存,此时应该清理客户端网络框架请求缓存、图片缓存等后,还应该清理Webview的缓存
  2. H5页面有错误,需要通过紧急清理缓存开关强制清理Webview缓存

    清理缓存实现

WebView缓存结构这里就不展开介绍了,不过以下实现估计一目了然,基本也知道WebView中有几块缓存了:

这里提供一种混合清理的方式,当App中接入了腾讯X5内核浏览器时,清理X5的缓存是必须的,但是同时也不要忘记清理原生浏览器产生的缓存:

1
2
3
4
5
6
7
8
9
10
11
12
13
//安卓自带浏览器内核
android.webkit.CookieSyncManager.createInstance(App.AppContext);
android.webkit.CookieManager cookieManager = android.webkit.CookieManager.getInstance();
cookieManager.removeAllCookie();
//X5浏览器内核
CookieSyncManager.createInstance(App.AppContext);
CookieManager x5cookieManager = CookieManager.getInstance();
x5cookieManager.removeAllCookie();
//删除浏览器相关数据库
App.AppContext.deleteDatabase("webview.db");
App.AppContext.deleteDatabase("webviewCache.db");
new WebView(App.AppContext).clearCache(true);
new com.tencent.smtt.sdk.WebView(App.AppContext).clearCache(true);