<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[caobin_study的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/caobin_study</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; caobin_study]]></copyright><item><title><![CDATA[面试提问--java基础&JVM虚拟机]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/115697635</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/115697635</guid><author>caobin_study</author><pubDate>Wed, 14 Apr 2021 14:19:35 +0800</pubDate><description><![CDATA[1.简述JVM内存模式？？

内存私有的：虚拟机栈，本地方法栈，程序计数器
内存共有的：方法区，堆

简述下

栈：栈中存放的是栈帧，是就是方法栈，每个方法从开始到调用完成，是一次完整的入栈出栈的流程
程序计数器：很小的内存区域，用来记录字节码在CPU时间片所执行的位置（执行到哪里了）
方法区：储存被虚拟机啊加载过的一些数据，如：被虚拟机加载的类信息、常量、静态常量、即时编译器编译后的代码等数据
堆：几乎所有对象都在对上创建，new xxx()

2.所有的对象都在对上创建吗？？
不是，符合逃逸分析的对象会]]></description><category></category></item><item><title><![CDATA[面试提问--线程&线程池]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/115586444</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/115586444</guid><author>caobin_study</author><pubDate>Sat, 10 Apr 2021 23:24:49 +0800</pubDate><description><![CDATA[1.创建线程有哪几种？？
据官方注释只有两种，打开Thread看官方注释；如图


第一种：直接new Thread

public static void main(String[] args) {
        new PrimeThread().start();
    }

    static class PrimeThread extends Thread {
        @Override
        public void run() {
            super.run]]></description><category></category></item><item><title><![CDATA[自定义View学习总结]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/115433753</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/115433753</guid><author>caobin_study</author><pubDate>Sun, 04 Apr 2021 22:58:50 +0800</pubDate><description><![CDATA[自定义View学习总结
自定义View一般有三种方式

继承View自定实现所有的逻辑
继承现有的View或者ViewGroup，在这些基础上加一些逻辑
组合现有的控件，添加一些额外的逻辑

这里我们就只看第一种，也是比较基础的。自定义View一般重写三个方法onMeasure，onLayout和onDraw

onMeasure：测量View来确定最终的宽高
onLayout：布局确定子View的位置，自定义ViewGroup才需要重写这个方法
onDraw：可以在画布上画任何你想画的东西

首先定义一个]]></description><category></category></item><item><title><![CDATA[Okhttp源码深入理解]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/115384848</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/115384848</guid><author>caobin_study</author><pubDate>Thu, 01 Apr 2021 21:20:35 +0800</pubDate><description><![CDATA[Okhttp已经用了好几年了，一直也没去研究下它的流程是怎么样，内部究竟是怎么样工作的，最近研究了下，写篇博客记录下，写的不是很好。
首先先从用法开始。

第一步：创建OkhttpClient

 val client = OkHttpClient.Builder()
  //创建Client同时可以添加拦截器、指定超时时间、证书校验等等操作
  .build()


创建Request对象

//可以在这里自定请求的ip、指定请求方式。、添加请求头
  val request= Request.Build]]></description><category></category></item><item><title><![CDATA[解决升级androidx和10.0后Dialog形势的Activity背景透明效果消失]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/115002383</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/115002383</guid><author>caobin_study</author><pubDate>Fri, 19 Mar 2021 11:48:27 +0800</pubDate><description><![CDATA[解决升级androidx和10.0后Dialog形势的Activity背景透明效果消失
Activity也可以像Dialog那样显示，只需要指定Activity的主题透明即可
在Manifest中设置Dialog透明的主题样式
 &lt;activity
            android:name=".MeetNotesActivity"
            android:configChanges="keyboardHidden|orientation|keyboard|screenSize|]]></description><category></category></item><item><title><![CDATA[java excel数据组装json成数据]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/113738016</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/113738016</guid><author>caobin_study</author><pubDate>Sun, 07 Feb 2021 11:41:06 +0800</pubDate><description><![CDATA[java excel数据组装json成数据
客户提供excel数据，androdi app是离线的，所以考虑将数据组装成json数据放到assets目录下面。
首先需要去下载pio的包，文章末尾我会放github的下载地址，代码很简单，pio的类就几个，主要还是自己如果去拼接json数据，自己找下规律，无非就是遍历行和列，先遍历行还是列
package cn.sccl.app.module.firstaid.utils;

import android.content.Context;
import and]]></description><category></category></item><item><title><![CDATA[Recyclerview点击滑动到指定位置]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/113365796</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/113365796</guid><author>caobin_study</author><pubDate>Fri, 29 Jan 2021 10:05:05 +0800</pubDate><description><![CDATA[最近有个新的需求，像有道翻译官的出国急救包，效果如下，

点击的时候 item跑到最上面 然后展开下面的内容。
首先想到用recyclerview来做，点的时候显示隐藏的内容，然后把item滑到最顶端，也就是item的top刚好滑动的recyclerview的top，加上动画就可以实现上面的效果了。
首先想到的用recyclerview自带的滑动方法mRecyclerView.smoothScrollBy(x,y)，这就需要计算当前item的top距离rv的top的值，然后传入mRecyclerView.s]]></description><category></category></item><item><title><![CDATA[GlideModule过时使用AppGlideModule]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/109176535</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/109176535</guid><author>caobin_study</author><pubDate>Tue, 20 Oct 2020 11:26:20 +0800</pubDate><description><![CDATA[这里写自定义目录标题GlideModule过时使用AppGlideModule
GlideModule过时使用AppGlideModule
在自定义GldieModule时，使用GlideModule提示过时了，
* @deprecated Libraries should use {@link LibraryGlideModule} and Applications should use
 * {@link AppGlideModule}.

那我们就使用AppGlideModule，去网上搜一下怎么配置]]></description><category></category></item><item><title><![CDATA[JNI学习笔记]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/108270019</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/108270019</guid><author>caobin_study</author><pubDate>Thu, 27 Aug 2020 22:45:32 +0800</pubDate><description><![CDATA[1.xxx.java生成 xxx.class文件 和专属的.h文件命令
javac - h . xxx.java

2.查看当前xxx.java文件所有签名信息
//首先得到xxx.class文件
执行-&gt;javap -s -p xxx.class
//得到结果如下，descriptor后的就是签名信息（）内的是参数；V是返回值
public class com.example.cb.test.native1.FieldTest {
  public int a;
    descriptor: I
]]></description><category></category></item><item><title><![CDATA[android studio创建flutter项目卡在creating flutter project]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/108119405</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/108119405</guid><author>caobin_study</author><pubDate>Thu, 20 Aug 2020 11:04:54 +0800</pubDate><description><![CDATA[android studio创建flutter项目卡在creating flutter project
最近学习了下flutter，搭建了开发环境，具体的配置方法网上一大堆，我这里就直说下我遇到的两个小问题。
1.flutter doctor网络异常（什么主机找不到&amp;404问题）

这个问题一般就是网络的问题了（不行的话试下用手机的热点）

2.android studio创建flutter项目卡在creating flutter project
这个问题也是困扰了我半天，如果环境搭建好了后卡在cr]]></description><category></category></item><item><title><![CDATA[C语言学习笔记]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/107762469</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/107762469</guid><author>caobin_study</author><pubDate>Mon, 03 Aug 2020 14:14:46 +0800</pubDate><description><![CDATA[1. C语言中打印格式
1.%p：打印指针地址；&amp;取地址
2.%s：字符串
3.%c ：一个字符
4.%d ：有符号十进制整数
5.%ld：输出长整型数据
6.％o：八进制数形式输出整数
7.％e：指数形式输出实数
8.%.10f：用来输出实数，保留小数点10位
9.％u：十进制数输出unsigned型数据(无符号数)。注意：%d与%u有无符号的数值范围，也就是极限的值，不然数值打印出来会有误
10.%x： 使用十六进制数字0f的无符号十六进制整数
11.%X： 使用十六进制数字0f的无符号十六进制]]></description><category></category></item><item><title><![CDATA[Java虚拟机学习笔记]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/107310184</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/107310184</guid><author>caobin_study</author><pubDate>Mon, 13 Jul 2020 10:25:12 +0800</pubDate><description><![CDATA[Java虚拟机学习笔记
//https://mp.weixin.qq.com/s/f9BiAW5y_UhRF-XMh98SgA
1.线程共享内存区域
堆
方法去
直接内存
2.线程隔离的数据区域
程序计数器
虚拟机栈
本地方法栈
3.程序计数器的理解
多线程轮流切换，需要线程有私有的计数器来储存当前线程执行的位置。
4.虚拟机栈
每个方法在执行的同时都会创建一个栈帧（Stack Frame）用于存储局部变量表、操作数栈、动态链接、方法出口等消息。每一个方法从调用直至执行完成的过程，就对应着一个栈帧在虚拟机栈]]></description><category></category></item><item><title><![CDATA[自定义ViewGroup结合merge标签减少嵌套]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/106934083</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/106934083</guid><author>caobin_study</author><pubDate>Tue, 23 Jun 2020 23:47:40 +0800</pubDate><description><![CDATA[自定义ViewGroup结合merge标签减少嵌套
废话不多说，直奔主题
在开发中经常会继承LinearLayout、RelativeLayout、FrameLayout等系统自带的ViewGroup来实现自己的布局，先来看我之前的写法
首先看布局，拿LinearLayout 举例;文件名R.layout.tes
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.androi]]></description><category></category></item><item><title><![CDATA[Android canvas draw常用方法收集]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/106826167</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/106826167</guid><author>caobin_study</author><pubDate>Thu, 18 Jun 2020 11:23:35 +0800</pubDate><description><![CDATA[Android canvas draw常用方法收集
1.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

参数
RectF oval 外切矩阵
float startAngle 开始角度
float sweepAngle 结束的角度
boolean useCenter 可以理解是否是封闭的圆弧
关于角度
起点3点钟方向（0度）
顺时针方向；6点是90度，9点是180度 以此类推…
]]></description><category></category></item><item><title><![CDATA[ADB命令]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/105389907</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/105389907</guid><author>caobin_study</author><pubDate>Wed, 08 Apr 2020 16:04:14 +0800</pubDate><description><![CDATA[首先需要配置ADB环境变量，不会的百度
1安装APK
adb install xxxx  (xxxx是你电脑apk的目录，在windwos上可以直接拖到cmd命令行)

2查看当前运行的Activity
adb shell dumpsys activity | grep -i run  

windows上需要先执行 adb shell , 然后在$后执行 dumpsys activity | g...]]></description><category></category></item><item><title><![CDATA[NestedScrollView中webview被点击，NestedScrollView会滑动问题，]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/103806380</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/103806380</guid><author>caobin_study</author><pubDate>Thu, 02 Jan 2020 16:20:57 +0800</pubDate><description><![CDATA[NestedScrollView中webview被点击，NestedScrollView会滑动，感觉像跳动一下
解决办法在webview父布局中加上
    android:descendantFocusability="blocksDescendants"

android:descendantFocusability="blocksDescendants"的意思是，父布局拦截子view的事件
...]]></description><category></category></item><item><title><![CDATA[使用360加固保后获取不到友盟多渠道信息]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/103798829</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/103798829</guid><author>caobin_study</author><pubDate>Thu, 02 Jan 2020 09:38:42 +0800</pubDate><description><![CDATA[使用360加固保后获取不到友盟多渠道信息
今天在使用360加固保进行多渠道打包时遇到一个很有趣的问题，就是打完包后怎么也获取不到渠道信息（统计用的友盟），但是使用Studio gradle多渠道打包就可以获取到，先来看下代码吧：
&lt;meta-data android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" android:name="UMENG_APPKE...]]></description><category></category></item><item><title><![CDATA[Android Studio 提示错误：No IDEA annotations attached to the JDK 1.8... ...]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/102556344</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/102556344</guid><author>caobin_study</author><pubDate>Mon, 14 Oct 2019 20:45:08 +0800</pubDate><description><![CDATA[点我

]]></description><category></category></item><item><title><![CDATA[NestedScrollView嵌套RecyclerView时自动滚动一段距离，顶部显示不全]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/102505835</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/102505835</guid><author>caobin_study</author><pubDate>Fri, 11 Oct 2019 17:40:21 +0800</pubDate><description><![CDATA[当在Fragment使用NestedScrollView嵌套RecyclerView时，来回切换Fragment时会发现NestedScrollView会自动向上滚动一段距离；
我第一反应就是有布局抢焦点了，有时候如果有EdutText也会有类似的现象，解决办法就是在NestedScrollView里的唯一布局设置自动获取焦点，代码如下：
&lt;androidx.core.widget.Nest...]]></description><category></category></item><item><title><![CDATA[RecyclerView监听滑动，判断是否完全显示最后一个item]]></title><link>https://blog.youkuaiyun.com/caobin_study/article/details/101774799</link><guid>https://blog.youkuaiyun.com/caobin_study/article/details/101774799</guid><author>caobin_study</author><pubDate>Mon, 30 Sep 2019 15:33:25 +0800</pubDate><description><![CDATA[再使用RV的时候，加载更多是很常见的一个需求，那么怎么判断RV是否已经滑动到最底部呢？
这个时候就需要LayoutManager一些现成的方法了，代码如下:
 mRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            var isToLast = false//判断是否是垂直向下...]]></description><category></category></item></channel></rss>