- 博客(78)
- 资源 (2)
- 收藏
- 关注

原创 Android中消息处理机制研究
消息机制概述本文亦在分析Android中Handler机制源码中Java层和C++层之间的关系,Android应用程序的每一个线程在启动时,都可以首先在内部创建一个消息队列,然后再进入一个无限循环中,不断检查它的消息队列是否有新的消息需要处理,如果有新的消息需要处理,那么线程就会将它从消息队列中取出来,并且对它进行处理;否则线程就会进入睡眠等待状态,直到有新的消息需要处理为止,这样就可以通过消息来驱动Android应用程序的执行。
2017-01-02 13:46:06
2076

原创 浅谈Android中Activity的生命周期和加载模式
我们在面试Android工程师的过程中经常会被问到这么一些问题,例如:Activity的生命周期,Activity的加载模式,Android中的四大组件,以及Object类的几大方法这么一些基础的问题,那么我们今天就就Activity的声明周期来探讨探讨!!!借调书上的一句话:当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前...
2015-11-17 17:32:26
2829
1
原创 设计模式总结
一.单例模式七种写法:1.第一种(懒汉,线程不安全):public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == nu...
2021-01-14 23:59:54
214
原创 JVM知识总结(未完再续)
先给大家上一张图,表示JVM中都讲了什么知识,接下来我们再一步步讲:一.JVM的结构:(再来一张图大家肯定都见过)类加载器将Class文件读取后,放到运行时数据区,然后执行引擎执行或调用本地接口、本地库。他就被存储在运行时数据区被使用;下面我们来分别讲讲运行时数据区的各部分结构:JVM内存模型主要分为两部分:线程共享内存(上图中绿色),线程私有内存(上图中黄色);1.我...
2021-01-14 23:59:15
337
转载 Java中集合整理
概述:List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Hashtable,LinkedHashMap,HashMap,TreeMap Collection接口下还有个Queue接口,有Prio...
2021-01-14 23:58:39
196
原创 HashMap源码分析
源码:/* * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * *...
2021-01-14 23:58:11
200
原创 Volatile关键字的理解
一、简介volatile是Java提供的一种轻量级的同步机制。Java语言包含两种内在的同步机制:同步块(或方法)和volatile变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。二、并发编程的3...
2021-01-14 23:57:36
273
原创 聊聊Java的多线程.(未完待续)
既然我们今天要说说多线程,那么我们不得不介绍介绍Java中线程的概念:线程介绍概念:线程是Java中重要的组成部分之一:"程序"(Program)是保存在存储设备上的文件; "进程"(Process)是正在计算机中执行的程序; "线程"(Thread)是进程中某个单一顺序的控制流或者一条执行路径. 在主流操作系统中,如 Mac,Linux,WIndows中线程有时...
2021-01-14 23:57:07
200
转载 带你了解android的IPC机制
原文:https://www.jianshu.com/p/2cfa14d0d75bIPC机制简介IPC是Inter-Process Communication的缩写,含义就是跨进程通信。首先我们要理解什么是进程,什么是线程。按操作系统的描述,进程是资源分配的最小单位,而线程是CPU调度的最小单位,一个进程可以包含多个线程(主线程、子线程)。多线程需要考虑并发问题。Android中的主线...
2020-01-15 17:52:43
323
原创 Android填坑记录
1.接入firebase问题:2020-01-02 16:46:53.878 2711-2853/? E/FirebaseInstanceId: Google Play services missing or without correct permission.2020-01-02 16:46:54.311 2711-2853/? E/FirebaseInstanceId: Google...
2020-01-02 17:04:59
16494
转载 获取android软键盘高度
获取android软键盘高度,虽然是在网上找的方法,不过已亲自测试过,这方法转载太多了,不知道谁是原著了,原作者莫怪。感谢原作者。MainActivity.javapublic class MainActivity extends Activity { private TextView textView; @Override protected void ...
2019-10-10 20:27:42
346
原创 华为p20,弹dialog点击返回键弹框不消失 bug。
啥也不说了上代码public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV...
2019-07-23 21:40:22
400
原创 Lottie使用介绍:(二版未完再续)
在工作中产品提出了这么一个一个动画需求,如下图:其实这个需求本来直接用属性动画就解决了,但是为了学学Lottie就强行用了一把。(然后最后的结果还是用了属性动画,因为Lottie的交互性不强,或者说我不太会用;感觉Lottie动画主要用来展示性的动画,交互功能比较多的动画个人还是喜欢用属性动画);1.导入lottie库://lottie框架compile'com.airbnb....
2019-07-17 20:59:45
1532
原创 Glide硬盘缓存逻辑
当Glide从两级缓存(LruCache及activeResources弱引用缓存)中都获取不到图片时,那么此时就会开启线程尝试从硬盘中读缓存。以下代码引用出自DecodeJob.java及EngineRunnable.java。从硬盘中读取时有缓存读取缓存,没有缓存直接解码原始图片数据。 private Resource<?> decode() throws Exce...
2019-03-15 18:01:14
1115
转载 Glide用法总结--缓存与下载方法
本文转自laizhixue博主,原文排版上有些问题,我在此加以修改。Glide加载图片虽说非常智能,它会自动判断该图片是否已经有缓存了,如果有的话就直接从缓存中读取,没有的话再从网络去下载。但是如果我希望提前对图片进行一个预加载,等真正需要加载图片的时候就直接从缓存中读取,不想再等待慢长的网络加载时间了,这该怎么办呢?preload()方法有两个方法重载,一个不带参数,表示将会加载图片的原...
2019-03-15 11:37:36
1474
原创 Android插件化的一点点探索
一、什么是插件化 谈到插件化,很多人会想到热修复,热更新,组件化这些名词。最近有网友在热补丁介绍及Andfix的使用 看了这篇文章给我发私信问,想把Andfix集成在自身项目里面。因为阿里出品,而且比较火。其实我当时也有过这个考虑,后面真正深入后,发现其实还有很多坑,而且github上面也很久没有代码更新了。综合各种原因,后面放弃了。(这里并不是诋毁Andfix,因为我自己也投入很多精力去研究...
2018-04-18 15:29:49
761
转载 RXJava详解
前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJava 。有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: R
2017-09-15 20:14:12
591
原创 解决瀑布流recyclerview的闪烁移动问题
最近在工作中遇到使用瀑布流本来想起来很简单,没想到遇到大坑。下面简单介绍下我是怎么做的,上班时间紧稍微记一下。 final int width = ViewUtil.getWidth(mContext); final int height = ViewUtil.getHeight(mContext); screenWidth = width;
2017-08-24 11:50:04
1815
原创 ScrollView嵌套Viewpager嵌套瀑布流Recyclerview
最近在工作中遇到这样一个情景,ScrollView嵌套Viewpager嵌套瀑布流Recyclerview,让我踩到一个大坑,首先是scrollview和viewpager的嵌套问题继而又遇到viewpager嵌套瀑布流recyclerview的问题,让我绞尽脑汁。最后想出一个办法:1.首先重写Scrollview解决滑动冲突问题。2.因为viewpager被嵌套在scrollview
2017-08-24 11:28:42
1209
转载 Android系统五层架构
Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。下图所示为 Android 平台的主要组件。 Android 软件栈Linux 内核android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 A
2017-07-18 19:24:25
925
原创 Configuration分析文档
AndroidConfiguration更新流程分析1.当用户发生语言切换事件,就是Configuration中locale值发生改变。这个函数主要获取AMS代理对象,然后从AMS中获取Configuration对象configpublic static void updateLocale(Locale locale) { IActivityManager am = Acti
2017-01-23 21:41:03
2394
1
转载 Configuration(Android6.0)
说到Configuration,大家最熟悉的想必是Android:configChanges=[“mcc”,“mnc”, “locale”,”touchscreen”, “keyboard”,“keyboardHidden”,”navigation”,”screenLayout”, “fontScale”,“uiMode”,”orientation”, “screenSize”, “small
2017-01-20 19:14:05
5499
2
转载 ConfigurationChanged流程梳理(屏幕旋转,语言,字体切换)
前段时间做了关于系统字体切换的功能,其中涉及到较多ConfigurationChanged的流程。屏幕旋转、mcc、系统语言切换等均是通过该流程来实现的。网上少有这方面的描述,故将该部分总结提炼出来做个小结。以下以屏幕旋转为例。关于屏幕旋转对于Activity的生命周期的影响也在以下可以体现,如何处理屏幕旋转对Act的影响也有启示作用。ConfigurationChange Flo
2017-01-18 16:28:13
2350
原创 探索Android中的Configuration
我们今天来说的Configuration是什么呢?它就是在Android中获取系统信息的一个东西,一个APP通过Configuration可以获取一些系统信息,比如语言,键盘,横竖屏。。等等当我们每次将系统设置修改后应用都要重启以重新加载配置文件,那么我们怎么办才能防止这种情况呢?我们首先可以修改Manifest.xml文件:<manifest xmlns:android="http:/
2017-01-17 20:09:58
569
1
原创 微信小程序探索
什么是小程序:小程序是一种不需要下载安装既可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下既可打开应用。也体现了“用完即走” 的理念,用户不用关心是否安装了太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。为什么要出小程序:因为服务号的体验及功能,不能满足用户的需求,所以催产出小程序。小程序 = 刚需 + 低频;传统应用是这样的架构:图1.传统应
2017-01-13 15:49:26
2177
转载 Android中图片占用内存的计算
在Android开发中,我现在发现很多人还不会对图片占用内存进行很好的计算。 Android中一张图片(BitMap)占用的内存主要和以下几个因数有关:图片长度,图片宽度,单位像素占用的字节数。一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数注:图片长度和图片宽度的单位是像素。图片(BitMap)占用的内存应该和屏幕密度(Density)无关,虽然
2016-09-02 09:58:52
521
转载 用java内部类实现多重继承
[java] view plain copypackage test; /** * class one: Class1 * @author TJ */ public class Class1 { /** * method: getName * @return name */
2016-07-28 21:37:58
2558
转载 TCP窗口滑动以及拥塞控制
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;
2016-05-07 01:14:51
592
原创 一次完整的HTTP过程请求步骤(输入一个URL回车,到返回页面)
一次完整的HTTP请求所经历的7个步骤HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1. 建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是
2016-05-05 21:13:04
10093
原创 二叉树先序建树及先序遍历
#include using namespace std; int N = 0;typedef struct node { struct node *leftChild; struct node *rightChild; char data; }BiTreeNode, *BiTree; void creat
2016-04-19 00:34:35
4609
原创 Android四大组件之BroadcastReceiver.
今天我们来说BroadcastReceiver.这个组件本质上就是一种全局的监听器,用于监听系统全局的广播消息。所以他可以实现系统中不同组件之间的通信。他用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent,同样程序启动Broadcast也需要两步。开发步骤: 1:创建需要启动的BroadcastReceiver的Inte...
2016-03-11 00:33:43
461
转载 TCP协议中的三次握手和四次挥手
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。那如何断开连接呢?简单的过程如下:
2016-03-06 21:35:56
381
原创 Android四大组件之Service
今天我们来说Service。正如书中所说Service组件也是可执行程序,他有自己的声明周期。创建,配置Service与创建配置Activity的过程基本相似。这里我们总结一下:1). 被启动的服务的生命周期:如果一个Service被某个Activity 调用 Context.startService 方法启动,那么不管是否有Activity使用bindService绑定或unbind...
2016-03-01 20:47:11
517
原创 java使用多线程实现生产者消费者问题
本例中我们用模拟吃苹果来实现生产者消费者问题: 模拟吃苹果的实例 一个家庭有三个孩子,爸爸妈妈不断削苹果往盘子里面放,老大、老二、老三不断从盘子里面取苹果吃。盘子的大小有限,最多只能放5个苹果,并且爸妈不能同时往盘子里面放苹果,妈妈具有优先权。三个孩子取苹果时,盘子不能为空,三人不能同时取,老三优先权最高,老大最低。老大吃的最快,取的频率最高,老二次之 ,老三再次
2015-12-20 22:37:13
1725
原创 使用java递归实现文件及文件夹的复制
完成老师布置的作业,写了这么小小的一个例子,其实在这个例子中比较重要的也就是递归的使用,在做这个实验时,开始犯了错就是在递归上,在实现循环+递归时一定要记住方法中使用的变量的属性,是局部变量还是成员变量.测试类:package com.xiyou.file;import java.io.File;import java.io.FileInputStream;import java.
2015-12-20 22:18:14
2671
原创 Android四大组件之ConentProvider.
Android中的四大组件有一个叫做ContentProvider的东西,这货是用来干什么的呢?下面听小弟给你细细道来:基本介绍: Android中有四大组件分别是Activity,ContentProvider,Service,BroadcastReceiver,它们都需要在AndroidManifest.xml文件中进行配置. Conte...
2015-12-15 22:28:36
791
原创 我们来谈谈Android回调.
说起Android的回调相信大家都不陌生,在你写的第一个Android程序中就运用到了回调机制例如onCreate()方法.其实在平常编写Android程序时也会遇到很多的回调方法例如:onActivityResult(),OnClickListener(),等...一个回调机制就像:"你妈妈叫你去买盐,然后你去买盐,买完盐回来,你告诉你妈妈你把盐买回来了让你妈开始炒菜,",在这个事件之中"你
2015-11-12 17:39:19
669
原创 Android短信验证实现步骤
1.先在www.mob.com网创建项目,进入后台会得到一个appkey和appsecrete;2.下载短信验证sdk并解压.3在eclipse中新建项目,并导入解压好的文件夹中的SMSSDK项目.4.右键点击导入的SMSSDK项目,进入Properties->android;在图片中标红位置打勾,如图示.5.右键点击新建的短信验证项目,进入Properties->an
2015-10-29 19:18:55
2386
转载 JAVA 对象引用,以及对象赋值
关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。
2015-10-25 21:28:05
429
转载 java变量的初始化之后的默认值
转载:http://blog.youkuaiyun.com/abc5382334/article/details/18254517对于类的成员变量不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值。1、整数类型(byte、short、int、long)的基本类型变量的默认值为0。2、单精度浮点型(float)的基本类型变量的默认值为0.0
2015-10-25 19:53:39
826
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人