Don


  • Home

  • Archives

关于单例模式

Posted on 2018-05-18 | In Tech | | Visitors:

五种实现方式

1.饿汉式

1
2
3
4
5
6
7
8
9
10
public class Singleton{

private static Singleton instance = new Singleton();

private Singleton() {};

public static Singleton getInstance(){
return instance;
}
}

类加载的时候就会创建对象,只会创建一次,在多线程情况下仍然能保持唯一的实例。如果单例类占用比较大的内存,创建饿汉式就不是一个太好的选择

2.懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Singleton{

private static Singleton instance;

private Singleton() {};

public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}

}

需要的时候才实例化对象,实现了延缓加载,但是,在多线程中无法保证示例的唯一性。

加锁的懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Singleton{

private static Singleton instance;

private Singleton() {};

public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}

}

Read more »

Android 8.0 后台位置限制

Posted on 2018-05-11 | In Tech | | Visitors:

问题

客户反映在Android 8.0手机上,当应用锁屏或者按Home键处于后台的情况下,Goolgle地图当前实时位置更新失败。

原因

为了减少电量消耗,Android 8.0会限制处于后台应用获取当前位置的频率,而且不论当前应用的目标SDK是哪个版本。

1
Important note : As a starting point, we only allow the background app to receive location updates several times an hour. We will continue to optimize the location update interval based on system impact and developer feedback throughout the preview period.

处于后台的应用只能实现一个小时几次的实时位置更新,当应用处于前台,实时位置更新功能和低版本的一样,不会受到次数限制。
对于需要频繁获取实时位置的应用,Google对此提供了优化办法。

优化应用位置获取

通过执行下列操作之一来提高位置更新的检索频率:

  • 将应用转至前台

  • 在应用中使用前台服务.需要注意的是当激活该服务的时候,需要在通知栏显示一个持续的通知。

  • 使用Geofencing(GeofencingApi接口)之类的API,google对这些api进行了优化以尽可能减少电量消耗。

  • 使用被动定位监听器,它可以增加位置更新的获取频率

受影响的APIs

当应用处于后台,一下api会受到影响

  • Fused Location Provider(FLP)

  • Geofencing

  • GNSS Measurements and GNSS Navigation Messages`

  • Location Manager

官网链接

Read more »

对Https的认识

Posted on 2018-04-24 | In Tech | | Visitors:

本文是对Https原理整体的认识,没有对涉及到的技术和知识点展开深层次的阐述,后期有时间的情况下会逐步完善。

本文涉及到的知识点

  • 对称加密和非对称加密
  • 消息摘要
  • 数字签名
  • 数字证书(自签名证书和CA证书,自签名证书需要在客户端配置进行校验)
  • TLS和SSL
  • 单向认证和双向认证
  • CA根证书

Http && Https

Http协议通信采用的明文传输内容,传输内容容易被截获,这样就很不安全,所有Https就应用而生了。
简单来说,Https = Http + TLS/SSL,在Http的基础上用TLS协议对传输内容进行加密,这样就可以确保网络交互的安全。Http和Http使用的默认端口分别是80和443。
Https的安全性体现在三个方面:

  • 对内容进行加密
  • 对交互方身份认证
  • 保证通信数据的完整性

TLS/SSL加密

对称加密

加密和解密采用相同的密钥,优点是速度快,加密效率高;缺点是交互双方协商的密钥一旦泄漏,双方的通信就不再安全

非对称加密

有一对密钥,分别是公钥和私钥,用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密;缺点是速度慢,效率比较低,尤其对于加密数据比较庞大时弊端更加明显

对称加密 + 非对称加密

TLS协议采用的是对称和非对称结合的方式。首先的疑问是:两种加密方式会不会更慢?答案是不会,因为非对称加密只对对称加密的密钥进行加密,这样客户端就可以放心的把对称加密的密钥发送给服务器了,客户端与服务器短交互的内容是用对称加密的密钥来加密的。

Read more »

WindowManager&BadTokenException:Unable to add window

Posted on 2018-04-23 | In Tech | | Visitors:

详细的异常log

BadTokenException

发生场景

在异步任务执行完成后,调用了show dialog.

原因分析

当异步任务完成后,调用该任务的activity可能处于被销毁或已销毁的阶段,即 new Dialog(context)所需的contex已不复存在。

解决办法

在调用dialog的时候判断activity是否isFinishing()

1
2
3
if(!isFinishing()){
showDialog();
}

Read more »

Redex --- Android 字节码优化器

Posted on 2018-04-19 | In Tech | | Visitors:

Redex简介

Redex是一款Facebook公司开发的Android字节码(dex)优化器.它提供了一个读写和分析.dex文件的框架,以及一系列基于该框架优化字节码的优化通道。利用Redex优化过的apk可以比之前的包体积更小,运行速度更快。

Redex已在github上开源,开发语言是C++.

Redex实践(Mac系统)

安装Xcode命令行工具

打开shell,输入一下命令

1
xcode-select --install

安装成功后,输入xcode-select -v进行验证

Read more »

git 常用命令

Posted on 2018-04-02 | In Tech | | Visitors:

工作中最常用的git命令

查看当前分支改动

1
git status

branch

列出当前项目本地分支

1
git branch

列出当前项目所有分支

1
git branch -a

基于当前分支创建分支x

1
git branch x

删除本地分支

1
git branch -D x

Read more »

Upgrade Android Studio

Posted on 2018-04-02 | In Tech | | Visitors:

Android Studio版本升级操作流程如下:

升级前

image1

Read more »

基于Hexo搭建Github博客

Posted on 2018-03-30 | In Tech | | Visitors:

Hexo

安装 hexo之前需要先安装git和node.js,详细安装见Hexo官网

1
2
3
4
5
npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

经过以上步骤的操作,就可以在浏览器中查看静态的blog模版,默系统认分配4000端口,完整地址:http://localhost:4000/

配置站点_config.yml文件

使用git将站点部署到远程仓库

1
2
3
deploy:
type: git
repo: git@github.com:ItsDon/ItsDon.github.io.git

然后执行以下命令

1
npm install hexo-deployer-git --save

安装完成后,就可以在_posts目录下添加markdown文件作为每一篇博客,通过以下语句来生成和部署我们的静态站点

清空缓存,即删除public目录

1
hexo clean

重新生成public目录,该目录下的放的就是博客所有的页面及相关的css ,js等

1
hexo g

通过git将.deploy_git目录下的文件部署到远端仓库

1
hexo deploy

Read more »

Hello Hexo

Posted on 2018-03-30 | | Visitors:

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Read more »
Don

Don

What does't kill you makes you stronger!

9 posts
1 categories
10 tags
GitHub E-Mail
© 2018 Don
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4