7 Androider_Zxg

尚未进行身份认证

我要认证

安卓应用开发

等级
TA的排名 8w+

深入理解Android Handler机制(深入至native层)

文章目录前言前置知识ThreadLocalThreadLocal使用ThreadLocal原理源码解读总结多路复用IOhandler工作原理概述工作原理架构流程Looperhandler构造消息分发发送消息移除消息MessageQueue创建MessageQueue循环消息enqueueMessagenative层的handler初始化阻塞唤醒其他handler为什么不会阻塞主线程?handler在Android源码中的应用后记前言handler作为Android中最重要的内容,需要相对透彻的理解,并非

2020-08-08 10:02:52

对称/非对称加密、证书详细介绍、https加密通信、Android打包签名讲解

概述本文记录加密、签名、证书等基础知识。并梳理应用证书、加密方式的具体案例,如https加密、Android打包签名等内容基础知识加密算法加密算法主要有非对称加密和对称加密两种算法对称加密算法指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。常见对称加密算法:DES,AES,3DES非对称加密非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 好多同学理

2020-07-11 09:51:39

React State Props使用示例

前言感悟这几天撸React代码,在撸之前没有仔仔细细阅读官方文档,拿着功能需求按照以往其他语言编程经验及随用随查的API进行开发。发现这个过程是痛苦的,每百度一个简单的功能实现,都会耗费巨大的尽力和筛选有效信息时间,其实静下心来花费一定时间完整阅读官方文档很有必要,因为官方文档能够涵盖大部分开发场景。场景在理解了(我以为自己理解了)sate&props后,需要实现一个如下功能组件:...

2020-02-05 20:59:50

小米 Android ACTION_UP不响应

问题概要在小米手机(测试机为小米4LTE)上,对一个TextView/Button设置OnTouchListener,长按View抬起时,并没有收到ACTION_UP时间,而是收到了ACTION_CANCEL事件。理论查阅资料,发现如下理论:当控件收到前驱事件(什么叫前驱事件?一个从DOWN一直到UP的所有事件组合称为完整的手势,中间的任意一次事件对于下一个事件而言就是它的前驱事件)之后,后...

2019-10-24 09:40:32

Android蓝牙耳机/扬声器音频切换

需求背景要求某些场景已经插入耳机或连接了蓝牙耳机,需要使用扬声器播放音频实现调研有线耳机的情况排除蓝牙耳机情况,使用有线耳机,切换时只需要打开/关闭扬声器即可。这样就可以实现在插入耳机的情况下,使用扬声器播放。代码如下://切换为扬声器AudioManageraudioManager=(AudioManager)this.getSystemService(Context.AU...

2019-08-13 19:08:21

byte 16进制 2进制理解

十六进制以下内容参考博客:关于0x16进制概念以0x开始的数据表示16进制,计算机中每位的权为16(10进制的权为10),即(16进制)10 = (10进制)1×16。备注:这里的0是数字0,不是字母O!为什么需要十六进制编程中,我们常用的还是10进制……毕竟C/C++是高级语言。比如:int a = 100,b = 99;不过,由于数据在计算机中的表示,最终以二进制的形式存在,所...

2019-07-18 17:00:12

靠谱Android Studio JNI Demo

前言作为工作了近四年时间的Android开发,搞通这个Demo用了一个工作日,觉得自己动手能力有些差,所以记录下。这里我们不介绍JNI的基础理论知识。只讲Demo流程。Demo第一步创建Demo工程,从SDK Manager中下载NDK相关组件,同时将Support Repository也下载下来第二步创建Java文件,如下:package com.example.jnidemo;...

2019-06-17 19:56:36

异步任务串行解决方案

问题描述在业务开发时,有时不仅仅是拉取一个数据接口展示列表这么简单。举一个购买场景:第一步调用网络接口登录第二步调用网络接口购买第三步查询购买结果第四步调用DBApi将购买结果写入本地第五步向外回调结果这里所有的操作都是异步的,再举一个聊天业务场景的例子。当收到有新消息通知。需要拉取获取新消息的网络接口以获得新消息。有这样几步:拉取本地DBApi查询本地保持的最大消息Id,以...

2019-03-21 10:24:25

AS Gradle task构建失败CompilationFailedException解决

问题在编译运行项目时,会提示一些Task的错误,但并没有列出错误的具体原因。我们无法根据已有的提示找出错误所在。如下:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':module-risk-control:compileDebugJavaWithJavac'. at org.gradle.api...

2018-12-14 11:23:52

Java集合迭代器

迭代器模式定义就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。这意味着迭代器需要提供统一的接口。普通访问我们先来看下正常访问集合访问数组int array[] = new int[3]; for (int i = 0; i < array.length; i++) { System.out.println(array[i]);...

2018-11-26 17:05:08

FreeMarker语法

FreeMarker语法概述FreeMarker Java使用FreeMarker语法数据结构注释访问值List相关循环listlist size判断下标判断if条件判断首字母大小写宏定义判空后记概述最近做公司一个需求,代码生成模板,编写用于生成Java Bean的ftl文件。在此记录下使用Freemarker的常用语法FreeMarker Java使用实例化FreeMarker配置类...

2018-11-22 20:03:59

SQL select语句复习

内连接概念内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。可以理解为取两个表的交集#语法select fieldlist from table1 [inner] join table2 on table1.column = table2.column举例A表| id | name ...

2018-11-07 19:35:21

Alamofire+HandyJSON+泛型封装的简单离散式网络框架

离散式与集约式网络框架集约式:每个请求都会走统一的入口,对外暴露了请求的 URL 和 Param 以及请求方式,入口一般都是通过单例 来实现。例如HttpClient.getInstance().sendRequest(url,params,callback)优点:1、使用便捷,可以快速开发缺点:1、对每个请求的定制要求不够,例如,现在有个新需求,请求新闻条目需要保存...

2018-11-05 15:43:22

IOS TableViewl详解(两种Cell注册方式)

学习iOS第二周,学习到了比较重要的组件TableView,照着书上敲,没有实现效果。在同事的帮助下,有了比较清晰的理解,记录在此。我使用的完全是xib的方式。我们先按照这种方式来梳理出Demo先看下项目结构目录先从最简单的model开始看起,可以理解为javabean//// News.swift// HelloIOS//// Created by zxg o...

2018-09-28 08:32:29

Android studio Tab Placement设置

默认的Tab Placement有两个痛点。1·、能够显示的项目不多2、由于Tab Placement默认在top,所以能看到的类很少,这样,当修改很多文件需要来回切换时,及其不方便。截图如下:我们可以设置将tab Placement放置左边或右边,并调整可以打开文件的最大数目。这样当我们修改很多文件时,或跟踪代码时会很方便。效果图如下:修改方法:第一步,修改tab p...

2018-08-24 10:47:45

回溯法解01背包问题

关于回溯法的概念,这篇文章讲的比较通俗易懂:https://blog.csdn.net/jarvischu/article/details/16067319贴出阅读这篇文章后解决01背包问题的Java代码,注释中加入了自己的理解package com.zxg.algorithm.backtrack;/** * 回溯法解01背包问题 * 背包问题的概念不再赘述。这里主要讲解下回溯法...

2018-08-16 18:10:25

Git基本使用

Git简介    Git是一个开源的分布式版本控制工具,用于有效、高速地处理从小到非常大的项目版本管理,Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。    与集中式版本控制软件SVN相比,Git的分布式管理最大的区别在于它可以使开发者将代码提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Gi...

2018-07-30 16:11:59

01背包问题Java(动态规划和暴力求解)

比较经典的一个问题,在理清思路之后,写出了代码。动态规划的思想还是将大的问题分解成小的的问题。或者说是分成小的步骤。例如在背包问题中,想求解背包容量为N的最大价值,先求解容量为N-1的最大价值,一步一步向前推,最终在返回来。自己也是理解了好久,突然有一天早上刷牙,就把问题想明白了。还是要多悟,多说无益,看代码:package com.zxg.algorithm.PackageQuestion...

2018-07-25 14:07:00

为什么wait,notify和notifyAll要与synchronized一起使用?

Object.wait(),Object.notify(),Object.notifyAll()都是Object的方法,换句话说,就是每个类里面都有这些方法。Object.wait():释放当前对象锁,并进入阻塞队列 Object.notify():唤醒当前对象阻塞队列里的任一线程(并不保证唤醒哪一个) Object.notifyAll():唤醒当前对象阻塞队列里的所有线程为什么这三个方...

2018-07-23 17:40:02

算法练习:int数组,将其中正数负数各移到一边

刷题看到这样一道题,以前都会上网找别人的思路,现在尝试自己思考分析。解决思路:从左遍历数组,找到第一个为负数的元素,从右向左找到第一个为正数的元素,交换。其中需要维护一个end变量记录右边位置,需要注意的是,end必须大于i。代码如下:/** * 将数组中正负数调整到各自一边 */public class ArithmerticPractice_12 { public ...

2018-07-18 17:04:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。