Android开发
文章平均质量分 66
Androider_Zxg
安卓应用开发
展开
-
对称/非对称加密、证书详细介绍、https加密通信、Android打包签名讲解
概述本文记录加密、签名、证书等基础知识。并梳理应用证书、加密方式的具体案例,如https加密、Android打包签名等内容基础知识加密算法加密算法主要有非对称加密和对称加密两种算法对称加密算法指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。常见对称加密算法:DES,AES,3DES非对称加密非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 好多同学理原创 2020-07-11 09:51:39 · 726 阅读 · 0 评论 -
小米 Android ACTION_UP不响应
问题概要在小米手机(测试机为小米4LTE)上,对一个TextView/Button设置OnTouchListener,长按View抬起时,并没有收到ACTION_UP时间,而是收到了ACTION_CANCEL事件。理论查阅资料,发现如下理论:当控件收到前驱事件(什么叫前驱事件?一个从DOWN一直到UP的所有事件组合称为完整的手势,中间的任意一次事件对于下一个事件而言就是它的前驱事件)之后,后...原创 2019-10-24 09:41:47 · 691 阅读 · 0 评论 -
Android蓝牙耳机/扬声器音频切换
需求背景要求某些场景已经插入耳机或连接了蓝牙耳机,需要使用扬声器播放音频实现调研有线耳机的情况排除蓝牙耳机情况,使用有线耳机,切换时只需要打开/关闭扬声器即可。这样就可以实现在插入耳机的情况下,使用扬声器播放。 代码如下://切换为扬声器AudioManager audioManager = (AudioManager) this.getSystemService(Context.AU...原创 2019-08-13 19:08:21 · 13506 阅读 · 2 评论 -
靠谱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 · 264 阅读 · 0 评论 -
异步任务串行解决方案
问题描述在业务开发时,有时不仅仅是拉取一个数据接口展示列表这么简单。举一个购买场景:第一步调用网络接口登录第二步调用网络接口购买第三步查询购买结果第四步调用DBApi将购买结果写入本地第五步向外回调结果这里所有的操作都是异步的,再举一个聊天业务场景的例子。当收到有新消息通知。需要拉取获取新消息的网络接口以获得新消息。有这样几步:拉取本地DBApi查询本地保持的最大消息Id,以...原创 2019-03-21 10:24:25 · 2271 阅读 · 1 评论 -
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 · 3817 阅读 · 1 评论 -
FreeMarker语法
FreeMarker语法概述FreeMarker Java使用FreeMarker语法数据结构注释访问值List相关循环listlist size判断下标判断if条件判断首字母大小写宏定义判空后记概述最近做公司一个需求,代码生成模板,编写用于生成Java Bean的ftl文件。在此记录下使用Freemarker的常用语法FreeMarker Java使用实例化FreeMarker配置类...原创 2018-11-22 20:03:59 · 619 阅读 · 0 评论 -
Android studio Tab Placement设置
默认的Tab Placement有两个痛点。1·、能够显示的项目不多2、由于Tab Placement默认在top,所以能看到的类很少,这样,当修改很多文件需要来回切换时,及其不方便。截图如下:我们可以设置将tab Placement放置左边或右边,并调整可以打开文件的最大数目。这样当我们修改很多文件时,或跟踪代码时会很方便。效果图如下:修改方法:第一步,修改tab p...原创 2018-08-24 10:47:45 · 1721 阅读 · 0 评论 -
百度面试经历之设计一个异步执行队列
面试官提出一个问题:设计一个异步执行的队列。我的第一想法是采用阻塞队列,提供向阻塞队列中添加任务的方法,提供启动任务队列中任务的方法,当时的思路比较模糊,在这里写一下。在代码中虽然使用了阻塞队列,但并没有使用阻塞队列的特性。基本上实现了面试官所要求的功能,代码如下public class AsyncRunnableQueue { private static class AsyncRunn...原创 2018-07-13 14:33:03 · 303 阅读 · 0 评论 -
百度Android面试经历之串行执行三个线程
接着上一篇内容,这次面试主要围绕多线程进行提问。接下来让我编程:串行执行三个线程,任务是每一个线程将i加1。我当时使用的是join()方法,但是由于对join()方法理解的不透彻。对自己的代码信心不大。我在这再写一遍:public class SerialDemo { public static void main(String[] args) throws InterruptedExce...原创 2018-07-12 19:41:10 · 1265 阅读 · 0 评论 -
Android GreenDao数据库升级数据迁移
概述之前数据库升级,做法是删除旧表新建新表,这样所有的数据均被删除,那么一些私有数据,例如用户登录信息也被删除。这样的用户体验很不好,用户更新APP后,需要重新登录。为改进用户体验,我们将用户私有数据做迁移。这样用户不需要重新登录。设计方案总体设计方案如下:1、创建临时表存储旧表数据2、删除旧表3、创建新表4、将旧表数据迁移至新表在迁移时需要考虑一个问题:若新表的表结构有变化如何处理?在代码中我们...原创 2018-06-28 21:06:02 · 1299 阅读 · 0 评论 -
Android异步加载方案
Android的Lazy Load主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,我们简单回顾下Android开发过程中需要注意的几个地方。Android应用开发过程中必须遵循单线程模型(Single Thread Model)的原则。因为Android的UI操作并不是线程安全的,...原创 2018-06-27 15:59:31 · 586 阅读 · 0 评论 -
onCreate()中getHeight()获取不到高度的原因(源码分析)
问题在Activity的周期方法onCreate()调用getHeight()为什么返回值为0?那在onResume()方法中可以获取到吗?那调用getMeasureHeight()可以获取到值吗?我们从源码分析一下。Activity启动简述其实,这里就涉及到Activity启动流程的问题,要点就是Activity.onCreate()/onStart()/onResume()等生命周期方法和vi...原创 2018-07-01 18:11:47 · 960 阅读 · 0 评论 -
Android应用功能开发之计时锁屏
需求描述 在开发金融类APP时,经常会有这样一种需求,超过时间限制未操作页面,需要页面回到密码登录页,一般是回到手密页,那我们如何实现这样一种需求呢?方案设计 APP跑起来之后,我们一定会有一种类似Manager的角色,它是单例的且与APP生命周期相同的一直跑在内存中。它的作用是管理业务,串联业务流程,启动页面等。我们可以单独做一个TouchTimeoutManager作为计时器,每隔...原创 2018-06-15 15:24:03 · 2466 阅读 · 0 评论 -
Android Service使用方法回顾
Service作为Android四大组件之一,承载着重要的作用,同时,熟悉Service也会为理解Binder打下重要的基础,这里是我初学Android时做的关于Service的笔记,现在总结到这篇文章中。概述android中的service与Windows中的服务类似,一般没有用户界面,运行在后台,可以执行耗时的操作,是安卓四大组件之一。其他组件可以启动service,并且当用户切换另外...原创 2018-06-07 21:09:18 · 328 阅读 · 0 评论 -
Android开发抽象状态机
前言 在Android APP开发过程中,有时可以采用状态机来解决某些复杂业务,例如下拉刷新功能,我们可以更加行为将其划分为Normal状态、Pull状态、Loading状态,根据不同的状态我们实现该状态下行为。例如Loading状态下我们需要显示loading图标。Pull(下拉)状态下我们要计算下拉距离等等。这篇文章我们一起探讨编写一个抽象状态机,在业务模块可以继承抽象状...原创 2018-06-13 13:42:32 · 278 阅读 · 0 评论 -
初探Retrofit使用方法
概念Retrofit框架是Square公司出品的网络框架,效率快、实现简单。运用注解和动态代理,极大简化网络请求繁琐步骤特点 性能好、处理快,使用简单;默认使用okhttp处理网络请求;默认使用Gson解析。常用注解接口 Retrifit采用注解方式标注方法,常用接口如下:@GET:GET网络请求方式@POST:POST网络请求方式GET请求相关:@Headers:头参数信息@Path...原创 2018-06-05 16:28:01 · 215 阅读 · 0 评论 -
LeakCanary原理解析
前几天面试,问到了我内存泄漏的相关问题,顺其自然问到了内存泄漏的检测工具LeakCanary的工作原理。当时不会,在看了几篇博文后,明白了其中的道理,理一下思路记录在此。准备知识ReferenceQueue 引用队列,对于弱引用和软引用来说,若需要知道该引用是否已被GC回收,那么在构造WeakReference或SoftReference时,传入一个ReferenceQueue。那么当这个引...原创 2018-06-04 16:31:29 · 434 阅读 · 0 评论