自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

尹人入胜的博客

以毕生精力解决看似复杂的问题,让'难多深'的故障得到'简少易'的脱变

  • 博客(58)
  • 收藏
  • 关注

原创 一图看懂JVM内存模型结构

2019-09-25 18:11:10 332

原创 基于Tinker/QZone的热修复原理简单介绍

2019-09-25 17:23:22 319

原创 ARouter探索和使用分析

一、ARouter含义简单说就是映射页面跳转关系的一个中间件,其中包含有一些跳转时的辅助功能(参数传递、动画、拦截器、服务绑定、碎片对象获取等)。二、原理 / 流程ARouter内部使用了注解处理工具APT(Annotation Processing Tool )技术,在代码编译期间对注解进行处理,生成JAVA文件,形成映射关系类。_ARouter中的init方法内,通过系统Clas...

2019-01-15 17:15:16 1935

原创 kotlin中异步处理框架-协程(Coroutines)的使用和配置

前言:本人通过对kotlin由浅到深使用了一年半,并且多个项目已基本达到纯kotlin开发。越来越觉得kotlin对于开发Android来说,不仅仅是多了一门开发语言,更是提升开发效率和优化程序设计的利器!值得Android开发者放心学习和语言转换,有Google做靠山,不用担心kotlin的前景问题。用了kotlin,你会发现其他所有语言在开发Android时,都显得那么臃肿和啰嗦。今天我们...

2018-11-16 12:44:58 4701

原创 Android时间轴控件-WheelView

在做时间轴或者某些类型的选择时,有时候设计师会给我们出类似下面的效果:因此,我们就需要重新自定义scrollview,,也就是移动端常用的时间轴控件:WheelView实现方式直接上代码:public class WheelView extends ScrollView { public static final String TAG = WheelView.class.getSi...

2018-11-16 11:26:03 2577

原创 Android与JS互调的简单使用

在项目开发过程中有时会遇到WebView在加载Js页面时,网页上的一些逻辑要通知Android本地进行简单的UI交互或者参数的实时传递,那么就需要我们在Android程序的代码里实现相应的互调配置,以达到互调的效果。下面我直接通过代码实现:JS调用Android方法:1、先设置Android中的webviewclass WebViewActivity:Activity(){ over...

2018-10-30 16:48:45 796

原创 浅谈Android启动优化

一、前言随着我们的应用版本迭代,需要集成和增加的资源越来越多,尤其是在Application中,应用的性能也将出现很多需要优化的点因此下面我们将从一个apk的启动原理去分析和解决启动时常常遇到的白屏、卡顿或者时间过长而带来的体验问题。二、应用启动方式1、冷启动概念:是指启动应用时系统进程中没有该应用,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。特点:冷启动因为系统...

2018-10-18 18:31:46 1908

原创 Android中设置Webview支持Cookie

Android中使用webview加载网页时,有时候网页需要要验证一些信息,例如登陆信息,要求我们将基础信息设置在cookie中,下面就是给webview设置cookie的实现方式,非常简单:CookieSyncManager.createInstance(activity)val instance = CookieManager.getInstance()instance.setAcceptC

2017-12-12 18:38:31 2696

原创 Android图片加载框架介绍

在Android开发中,图片绝对是个然不开的话题,那么在图片的加载展示和davik内存的管理上,我们的管理策略就显得格外重要,稍不严谨就会出现OOM。图片的加载包括图片的缓存、图片的处理、图片的显示等,而通常大家都会使用三方框架,第三方框架的使用较为方便,这大大的减少了工作量、提高了开发效率, 大部分框架其实都差不多,配置稍微麻烦点,但是使用时一般只需要一行,显示方法一般会提供多个重载方法,支持不同

2017-08-03 16:45:23 485

原创 Viewpager+Fragment潜在的一些坑及解决办法

viewpager加fragment的搭配在平常的开发中很常见,这样可以很好的避免的fragment单独使用时在切换页面时常常遇到的一些显示问题又可以快速的解决界面数据预加载保障流畅度。然而世间万物都有两面性,viewpager+fragment虽然有时大大的,但是如果使用的不正确,也会带来一些莫名其妙的问题,接下来我们就对这俩控件的使用最一个全面的整理。固定子页数量预加载方式://创建数据Lis

2017-08-03 11:29:58 1261 1

原创 Android应用的多语言切换

在一些应用需要国际化或者面对各种用户群体时,会涉及到语言的不同,所以我们在开发应用apk时,记得一定要养成将应用中涉及到的所有文字信息放在string.xml里的好习惯!Android中的多语言切换,对于我们应用层的开发同学来时,操作起来非常见到,代码也很简单,大部分工作都是让framwork层的资源进程调度框架给代工了。OK,下面我们一步步看看怎么完成多语言的配置和切换:1.右击res目录,打开对

2017-06-26 13:10:18 8571 2

转载 Okhttp使用和源码分析三(OkHttp源码分析)

通过前两篇对Okhttp使用的介绍,我们大致对Okhttp有了初步了解。这篇文章我们就深入地分析一下Okhttp的原理,看一下源码是如何实现的。1.从请求处理开始分析当我们要请求网络的时候我们需要用OkHttpClient.newCall(request)进行execute或者enqueue操作,当我们调用newCall时: /** * Prepares the {@code request}

2017-06-13 19:01:55 373

原创 Okhttp使用和源码分析二(OkHttp3.x用法)

上一篇介绍了OkHttp2.x的用法,这一篇文章我们来对照OkHttp2.x版本来看看,OkHttp3使用起来有那些变化?1.使用前准备,Android Studio 配置gradle:compile 'com.squareup.okhttp3:okhttp:3.2.0'compile 'com.squareup.okio:okio:1.7.0'添加网络权限:<uses-permission an

2017-06-12 18:27:39 443

原创 Okhttp使用和源码分析一(OkHttp2.x用法)

由Square团队发明的网络框架OkHttp,想必目前火过移动互联网半边天。从由Google发明的Volley停止了更新后,而OkHttp得到了官方的认可,并在不断优化。上篇文章我们简单分析和演示了Volley的源码,不过再怎么分装,OkHttp都会以强大的功能和网络请求的优化,怒甩Volley几条街!!!首先根据本人自己的理解和使用总结,OkHttp的优势由以下这些(实在太多了): 1.会根据连

2017-06-12 17:42:57 3902

原创 Volley的使用和源码分析

Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。1.Volley 的主要特点: (1). 扩展性强。Volley 中大多是基于接口的设计,可配置性强。 (2). 一定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处理,请求头的处理,缓存机制的支持等。并支持重试

2017-06-12 16:16:08 288

原创 Android中Dalvik和Art的认识和区别

Dalvik是什么? Dalvik是Google公司自己设计用于Android平台的虚拟机,同时也是android设备厂商的核心部件之一。它可以支持已转换为 .dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linu

2017-06-07 17:43:08 943

原创 Java虚拟机-JVM的运行原理

Java技术,主要包括Java编程语言、Java类文件格式、Java虚拟机(JVM)和Java应用程序接口(Java API)四部分。这里,我们特意来深刻认识一下JVM的工作和运行原理。JVM的生命周期产生:当启动一个Java程序时,一个JVM实例就产生了; 运行:main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程。main属于非守护线程,

2017-06-07 16:17:58 503

原创 HashMap与HashSet的区别

HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口。它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它对集合中的对象进行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。相同之处: 1.都是基

2017-05-23 11:17:24 514

原创 HashMap与HashTable的区别(精简版)

对于HashMap与HashTable的区别这个老掉牙的问题,虽然平时我们在开始发都把集合用的很溜,但是要让你讲出来或者是说出它的内在原理,很多人一脸懵逼。接下来我就通过三个方面简单概括这个问题:背景: Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现相同之处: 1.它们都是数据的集合,可以存放多个数据对象; 2.都是由key/

2017-05-23 10:53:24 349

原创 腾讯bugly-微信tinker热修复快速接入

继插件化后,热补丁技术在2015年开始爆发,目前已经是非常热门的Android开发技术。随着对热补丁的多次尝试与应用,微信建立起自身的流程规范,同时也不断的尝试拓展它的应用场景。OK,下面我们直接上代码:第一步:添加插件依赖 工程根目录下“build.gradle”文件中添加:buildscript { repositories { jcenter() }

2017-05-17 19:18:12 708

原创 SoundTouch音频处理库的简单使用(音调、音速、声道等等)

音频的处理,通常会涉及到音调、音速或者声道的切换,例如睡觉时,开车时,跑步时,party,吃饭时等等根据不同场景我们也许会要求音乐能有不同的意境变化,强大的soundtouch音频开源库基于C++的底层算法处理,为我们应用层的开发者提供了非常便捷的调用接口。下面我们来一步步分析soundtouch的结构以及是如何使用的。结构: 1.首先我们打开soundtouch源码,看到初始化so库的操作:s

2017-03-29 13:56:02 10242 2

原创 Android中从asset/raw拷贝数据的正确方式

开发中我们经常会遇到数据的拷贝,通常的拷贝方式都是以下这种:public boolean copyDataToSD(Context context, String fileName, File strOutFile) { try { OutputStream myOutput = new FileOutputStream(strOutFile); In

2017-03-24 19:05:07 1511

原创 android中数据的分包

之前在开发中,遇到了一个问题,就是在项目assets下有一个apk需要在应用启动时安装到设备中,实现的思路是需要首先将apk拷贝到sdcard中,然后执行安装操作,还有一个问题就是项目中的数据库也需要放在sdcard中,这个apk大约有5M左右,我的数据库大约有30M左右,接下来我就按照普通的I/O流拷贝:public static boolean copyDataToSD(String fileN

2017-03-17 13:12:54 1303

原创 代码中快捷安装、删除apk的两种方式

通常我们安装应用会将应用的地址传给系统安装界面中,然后手动点击安装,要么就是之前我们之前讲的利用静默安装,那么接下来给大家介绍两种通过shell命令来安装apk的方式:1.安装到系统/data/data下:public void InstallApk(Context context, final String packagename, final String apkName) {

2017-03-17 12:25:59 1171

原创 Amdroid之系统桌面悬浮框(WindowManager)

如今大部分应用为了让用户时刻注意到自己应用的特殊功能,或者告诉用户一些提示性的信息时,这时候假如用户退出了我们的应用,那么我们可以显示出一个系统级别的悬浮框,达到用户快捷操作和进入我们应用的效果,那么我们则利用android自带的WindowManager控件实现:public class WindowUtils { private static final String LOG_TAG =

2017-03-03 16:04:08 521

原创 通过代码动态实现和模拟Android手机上的back键

在app开发中,通常我们要返回一个界面或者是关闭一个界面有两种方式,一是直接调用activity的finish();二是直接操作设备的back键。那么接下来给大家介绍一种动态实现类似按下back键的操作行为:try { //虚拟返回按钮 Runtime.getRuntime().exec("adb shell input keyevent 4");} catch (Except

2017-03-03 15:38:29 5105 1

原创 很好用的Android原生侧滑控件-DrawerLayout

在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的“抽屉”功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一个简单效果的部分截图: 左拉: 右拉: 怎么样?是不是在平时开发的应用中很常见?OK,那么接下来我直接上代码:activity_sliding.xml:<?xml version="1.0" encoding="

2017-03-03 15:26:59 19934

原创 android之Xml的高效解析方式——pull

我们知道,解析XML在各个平台使用也非常广泛,android也是一样,经常会涉及到XML的解析读取,解析方式主要有三种:SAX解析器、DOM解析器和PULL解析器。 SAX解析器:它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的,也就是ContentHandler为重要核心,解析过程中每遇到一个事件源,只有调用事件解析器才能得到相应的处理;不过它的优点主要是解析速度快,占用内存少。

2017-02-14 12:09:11 11311 1

原创 静默安装apk的实现

由于apk的升级在所有的应用中都会使用,所以apk静默升级是大部分应用必不可少的技术研究点,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk:Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile

2017-01-19 13:22:57 845

原创 最新AS中如何使用NDK?

在AS更新到1.3之后移除了NDK的编译配置,所以当我们在更新到2.2之后时,如何配置呢?其实,在AS中一切都是那么的简单,接下来我用截图一步步给大家介绍: 1.下载NDK插件: 或者: 2.当下载完成后倒入: 3.创建最新集成ndk的项目: 创建完成后,项目中会自动生成cpp源文件、CMakeLists.txt和app/budile.gradle中的配置: 这里的native-li

2017-01-09 18:39:45 6292

原创 AS中如何引用lib资源?

在eclipse中我们如果用so,则直接放在项目目录下的libs中即可,那么在Android Studio(AS)中加入要导入so,是不是也放在libs中就可以了呢?答案当然不是,AS的编译特点是基于gradle完成的,所以我们还要在项目目录中的app层级下的build.gradle中的android{}方法中加上以下配置:sourceSets { main {

2017-01-09 17:25:57 1667

转载 Android安全加密:对称加密

Android安全加密专题文章索引Android安全加密:对称加密Android安全加密:非对称加密Android安全加密:消息摘要Message DigestAndroid安全加密:数字签名和数字证书Android安全加密:Https编程一、凯撒密码1. 概述凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定

2016-12-12 12:56:01 499 1

转载 Android校招复习资料整理

本文出处:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个小时。加上毕业论文开题的压力,所以没有继续参加各个公司笔面试了。过去几个月中,复习时也曾经到处搜资料、搜真题。毕竟从小到大考试都是有教科书复习,有老师划重点。现在找工作都没有这些,只有靠自己。所以

2016-12-12 12:43:28 224

原创 Android面试题及答案大全

以下是根据2015年多个企业Android工程师招聘统计的面试题下半部分:

2016-12-12 12:40:16 332

原创 Android面试大全

以下是根据2015年多个企业android工程师招聘统计的面试题:

2016-12-12 12:19:42 221

原创 走到哪都会遇到的面试题

1、Android四大组件; 2、动画、滑动冲突、自定义View、事件分发机制; 3、多进程和多线程、以及相关的通信机制:AsycnTask、Handler、Binder、AIDL; 4、Android的数据存储方式; 5、UI布局、Fragment的使用; 6、内存&性能优化、图片的处理、屏幕适配; 7、网络通信的几种实现、断点续传的实现、了解TCP/IP、UDP、HTTP等网络协议;

2016-12-12 11:32:02 351

转载 Android消息处理机制Handler

在日常开发中,不管出于什么目的,我们可能都会用到Handler来异步更新UI,有时是为了将一些费时的操作放到异步线程去处理,然后通过Handler将数据更新到UI线程,有时是为了在子线程里更新UI,种种原因,反正我们最后都是选择了直接的Handler+Message组合或者AsyncTask,而了解AsyncTask的同学都知道,AsyncTask内部就是通过Handler和Message实现的线程

2016-12-12 11:29:02 266

转载 进程与线程

进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,

2016-12-12 11:07:04 259

原创 图片文件压缩(保真并不超过100KB)

前沿: 在android开发中,图片的处理很常见,在获取到拍照或者代码生成的图片,通常会因为图片所占的空间过大而出现OOM,今天给大家共享一种最常见,也是最简单直接的图片压缩方法,不管你的手机像素有多高,图片有多大,最终压缩的图片只有100kb以内,下面直接展示代码:public class FileCompressUtils { @SuppressLint("NewApi") pu

2016-11-28 14:17:01 3738

原创 android中通过adb shell关闭和启动应用

1.终端上: a.首先我们需要来到sdk/adb目录下; b.执行“adb connect 192.168.1.xx”连接到你的设备,‘xx’表示你设备的ip; c.执行“adb shell ps ”查看进程目录; d.找到你要关闭或者打开的应用包名,然后执行“adb shell am force-stop 包名”强制关闭或者“adb sh

2016-11-21 17:54:01 21376

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除