自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tiangaopan的博客

如果转载请进行标注

  • 博客(26)
  • 资源 (2)
  • 收藏
  • 关注

原创 进程总结

创建和挂载启动所需要的文件目录 初始化和启动属性服务 解析init.rc配置文件并启动Zygote进程

2020-07-08 17:19:17 119

原创 几种工厂模式的区别

简单工厂,工厂方法,抽象工厂简单工厂:一个工厂生产许多产品工厂方法:一个具体的工厂生产一个具体的产品抽象工厂:一个具体的工厂生产一系列相关的产品

2020-07-08 17:13:52 403

原创 Https中SSL握手建立的过程

假设现在有客户端 A 和服务器 B : 1、首先,客户端 A 访问服务器 B ,比如我们用浏览器打开一个网页 www.baidu.com ,这时,浏览器就是客户端 A ,百度的服务器就是服务器 B 了。这时候客户端 A 会生成一个随机数1,把随机数1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。 2、服务器 B 知道这些信息后,然后确认一下双方的加密算法,然后服务端也生成一个随机数 2 ,并将随机数 2 和 CA 颁发给自己的证书一同返回给客户端 A 。 3、客户端 A 得到

2020-06-19 15:02:55 342

原创 【白话】App从启动到页面显示出来发生了什么

点击App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求 system_server收到请求后,向Zygote进程发送创建进程的请求 Zygote进程fork出新的子进程,即App进程 App进程创建出来后,通过Binder IPC向system_server发起attachApplication请求 system_server收到请求后,进行一系列的准备工作,再通过bind IPC向App进程发送scheduleLaunchAc

2020-05-21 15:27:33 319

原创 【白话】APK编译打包流程

Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:App的源代码,有资源文件生成的R文件(aapt工具),AIDL文件生成的Java接口文件,产出为.class文件用AAPT编译R.java文件 编译AIDL的java文件 把java文件编译成class文件 class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,包含了所有的class信息,包括项目自身的class和依赖的class,产出为.dex文件 apkbuilder工具将.

2020-05-21 10:10:40 193

原创 【白话】measure,layout,draw

这三者的顺序就相当于盖房子1)先测量地基,有多大的尺寸可以让我来操作(measure)2)再来布局设计,根据测量后的尺寸来设计出符合自己审美的布局(layout)3)绘制,开始真正的装修了(draw)Measure主要是调用measure()方法,主要有两个参数widthMeasureSpec, heightMeasureSpecMeasureSpec就是测量规格,共32位,分为高2位和低30位,高2位就是测量模式,低30位就是测量的尺寸大小「通俗来讲:按照什么方法来测量类.

2020-05-20 16:53:12 187

原创 Window,Activity,DecorView,ViewRootImpl之间的关系

Activity不负责控制视图,只是控制生命周期和处理事件,真正控制视图的是Window,Activity中含有一个Window,Window才是真正代表一个窗口Window视图的承载器,内部持有DecorView,而DecorView是View的根布局,Window是一个抽象类,真正的实现类是PhoneWindow,PhoneWindow有个内部类DecorView,通过其来加载R.layout.activity_main。Window通过WindowManager将DecorView加载其中

2020-05-20 16:20:08 525

原创 垃圾收集算法

垃圾回收机制知识点:JVM中的年代JVM中分为年轻代(Young generation)和老年代(Tenured generation)。 HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例,接下来我们会聊到。 一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor 区中每熬过.

2020-05-19 15:30:57 153

原创 finally与return执行顺序

Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?不一定,(1)需要执行到try语句中(2)try中如果有System.exit(0)也不会执行,因为System.exit(0)是终止java虚拟机jvm的,如果虚拟机都停止了,后面的肯定都不会继续执行try...catch...finally中分别执行顺序呢?public int test() { int a = 10; try { .

2020-05-13 15:12:13 419

原创 HashMap

用于记录,有不对的欢迎指正hashMap的put(key,value)进行了哪些操作?首先判断table是否为空,如果是的话先进行扩容,后面再进行操作1.根据插入的的key获取到hash值,通过hash%hash表长度获取存放的位置2.判断存放的位置是否存在元素,如果没有则直接进行存放,如果有的话判断hash值和key值是否一致,如果一致说明是覆盖操作3.如果不一致,则说...

2020-04-26 11:38:28 192

原创 手写Glide框架

文章主要是仿照Glide方式来实现了图片加载,当然功能没有Glide那么全面,主要用来练习总结 写一个Glide框架,首先需要我们来分析一下实现思路,主要分了六大步骤,接下来我们会一步一步来实现操作资源封装 活动缓存 内存缓存 磁盘缓存 生命周期 图片加载 资源封装 资源的封装主要是为了后面的缓存策略进行服务,方便查找放置,所以有...

2020-04-04 21:17:42 263

原创 汉诺塔问题

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。这里我们分别来表示一下假设我们A上面的数字为1,那么我们只需...

2020-03-25 15:25:53 928

原创 a*2为什么比a>>1效率低

a*2 与 a>>1的执行结果是一样的,但是执行效率不同a>>1执行效率比前者高出很多,主要是因为在计算时计算机会采用逆波兰表达式,标准四则运算表达式—中缀表达式9+(3-1)*3+10/2 20计算机采用—后缀表达式9 3 1 - 3 * + 10 2 / + 20举个例子,简单的2*2操作,这种标准的四则运算是中缀表达式,计算机则采用的后缀表达式...

2020-03-24 11:14:05 261

原创 android--组件化

android组件化现在来说算是比较老生常谈的一种方式了,写此文主要是回顾+锻炼自己表达能力,主要描述下思想,具体的代码实现不做过多赘述,主要是仿照实现了ARouter的功能 常用的开发大体上来说分为了模块化,组件化,插件化,像模块化主要是将一些公共功能以及一些业务模块进行抽离,其实来说是适用大多数项目的,组件化以及插件化个人感觉比较适用于大一些的项目,团队与团队之间配...

2020-03-20 16:03:54 145

原创 用面向对象的方式来操作数据库

正常来说使用sql来操作数据库的话没啥问题,但是对于一些不太擅长写sql的同学来说,通过面向对象的方式来操作数据库,可以极大的避免写sql时不小心犯错误的情况,接下来让我们直接进入主题首先是需要先定义接口规范,即数据库常用的增删改查操作,这用来让我们知道有哪些功能,当然还可以自己再继续扩展public interface IBaseDao<T> { /** ...

2020-03-18 15:32:45 1284

原创 RecyclerView之拖拽滑动

recyclerview控件大家已经用的非常熟悉了,最近开发时做仿微信发送朋友圈注意到微信选完图片之后可以对图片进行拖拽删除,所以进行了尝试,其实recyclerview本身已经提供了帮助类,主要是继承其回调,下面对代码进行讲解分析。public class RecyclerCallBack extends ItemTouchHelper.Callback { private int d...

2020-03-18 11:55:06 109

原创 android-自定义换肤(2)

android-自定义换肤(1)https://blog.csdn.net/tiangaopan/article/details/104895134

2020-03-16 13:52:24 710 1

原创 android-自定义换肤(1)

本质上来说换肤其实挺简单的,主要抓住关键的点,就是获取到控件去设置对应的颜色,字体,背景等 正常来说我们使用activity来加载一个页面的时候使用setContentView(R.layout.activity_main); 让我们进入源码追踪一下 @Override public void setContentView(@LayoutRes int layo...

2020-03-16 11:37:49 372

原创 Handler--为什么在子线程中可以弹吐司却不能UI绘制

private void initDeal() { Thread hanMeiMeiThread = new Thread(){ @Override public void run() { Looper.prepare(); mHandler = new Handler(...

2020-03-11 10:47:09 345

原创 Flutter 与原生通讯

开发中通常需要 Flutter 端与原生内容进行交互。Flutter 定义了三种不同的ChannelBasicMessageChannel:用于传递字符串和半结构化的信息 MethodChannel:用于传递方法调用 EventChannel:用于数据流的通信BasicMessageChannelpublic class FlutterPluginBasicTest implem...

2019-09-25 16:02:16 425

原创 kotlin builder模式写法

class Person private constructor(builder: Builder) { internal var name: String? = null init { name = builder.name } class Builder { internal var name: String? = nul...

2018-03-30 14:31:41 6255

原创 Kotlin var与val区别

         Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。      var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。      val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。...

2018-03-21 10:38:53 155

原创 java 反射 getGenericSuperclass

public class Women extends Person&lt;Women&gt; { private static final String TAG = "Women"; public void execute() { Type type = this.getClass().getGenericSuperclass(); Log.e(T...

2018-03-12 22:42:16 311

原创 始终调用不出软键盘的问题

最近项目中遇到这样的问题,点击edittext始终调取不出来软键盘,如果直接设置取反,又会出现一闪而过的情况,所以需要加上一些判断,经过测试解决了此问题,希望谁知道是什么原因的话给说一下mSearchEdit.setOnTouchListener(new OnTouchListener() { @Override public boolean

2016-11-05 23:19:42 431

原创 android 让gallery中图片默认居左显示

最近项目中有用到gallery,要求默认是在最左边显示出来的,也试过 gallery.setSelection(position) ;但是对于初始状态没有图片的话,就不能这样用了,最后想到一个办法是设置左边距为负数,这样就可以达到默认居左的显示效果。package com.example.test2;import android.app.Activity;import android.con

2016-10-24 23:08:36 2607

原创 Android 通过反射来隐藏年月日的日-DatePicker

经常会有这样的需求,就是去隐藏年月日中的年或者日,下面我通过反射来达到这样的目的 /** * @param picker 传入一个DatePicker对象,隐藏或者显示相应的时间项 */ public static void hidePicker(DatePicker picker) { // 利用java反射技术得到picker内部的属性,并

2016-10-16 16:43:05 1562 1

upload-pgyer.hpi

jenkins自动化打包,上传后,可避免写脚本来实现上传下载操作,上传后会获取到包的url等信息,可以根据信息生成二维码

2020-03-31

androidstudio资源使用次数

使用androidstudio查看资源使用次数,

2018-09-20

空空如也

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

TA关注的人

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