<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gacmy的专栏]]></title><description><![CDATA[每个人的强大都是从弱小集聚起来的]]></description><link>https://blog.youkuaiyun.com/gacmy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gacmy]]></copyright><item><title><![CDATA[Bluez目录结构分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/126907114</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/126907114</guid><author>gacmy</author><pubDate>Sat, 17 Sep 2022 16:23:08 +0800</pubDate><description><![CDATA[bluez目录结构分析]]></description><category></category></item><item><title><![CDATA[1.Linux蓝牙基础]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/126907048</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/126907048</guid><author>gacmy</author><pubDate>Sat, 17 Sep 2022 16:20:06 +0800</pubDate><description><![CDATA[一个GAP Periphereal在被连接后，就扮演GATT Server的角色，GAP Central设备正在连接一个GAP Periphereal设备那么他就成为了一个GATT Client的角色。]]></description><category></category></item><item><title><![CDATA[Matrix-APKChecker分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/120175054</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/120175054</guid><author>gacmy</author><pubDate>Wed, 08 Sep 2021 10:52:02 +0800</pubDate><description><![CDATA[APKChecker分析
介绍
Matrix是腾讯开源的一个APM项目，对于android优化方面无从下手的话，感觉可以研究一下
这里主要分析其中一个模块APKChecker,这个模块和其它模块的关联性不是很大，可以单独提取出来、主要就是检测apk内重复资源文件，大小，未使用文件，
stl重复引入等功能。如果有自己的想法也可以进行扩展.
使用流程

指定配置文件运行
./app/build/install/app/bin/app  --config ./apk-checker-config.json

配置]]></description><category></category></item><item><title><![CDATA[using例子]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/111581140</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/111581140</guid><author>gacmy</author><pubDate>Wed, 23 Dec 2020 11:25:35 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;

using namespace std;

namespace game1
{
int id = 10;
};

namespace game2
{
int id = 20;
};

void testHowUse()
{
  cout &lt;&lt; game1::id &lt;&lt; endl;
  cout &lt;&lt; game2::id &lt;&lt; endl;
}

void selectWho1(){
  using namesp]]></description><category></category></item><item><title><![CDATA[XmlPullParser解析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/111304652</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/111304652</guid><author>gacmy</author><pubDate>Wed, 16 Dec 2020 22:27:27 +0800</pubDate><description><![CDATA[XmlPullParser解析

android 解析xml通过XmlPullParser接口解析的。它的解析顺序根据xml文档从上到下解析的

XmlPullParser里面有几个属性:还是看代码琢磨吧
   fun parseXml(){
     
        var inputStream = assets.open("activity_main.xml")
        var xmlFactory = XmlPullParserFactory.newInstance()
        v]]></description><category></category></item><item><title><![CDATA[内核里面的数据结构链表，红黑树如何找到我们要的数据类型]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110584042</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110584042</guid><author>gacmy</author><pubDate>Thu, 03 Dec 2020 22:28:54 +0800</pubDate><description><![CDATA[最近看binder,发现里面的数据结构链表，红黑树结构体只有自己的节点类型，没有存放我们的数据，不像java，可以给链表一个泛型，传入数据类型结构。很好奇它怎么能根据节点找到我们要的数据。有了下面的demo，解释一下。

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
struct node{
  struct node* next;
};

struct data{
  struct node dnode;
  int type;
};
//java.]]></description><category></category></item><item><title><![CDATA[内部拦截法事件源码分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110315537</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110315537</guid><author>gacmy</author><pubDate>Sun, 29 Nov 2020 15:34:23 +0800</pubDate><description><![CDATA[子View重写dispatchTouchEvent方法

   var mLastX = 0f
    var mLastY = 0f
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        val x = ev.x
        var y = ev.y
        when(ev?.action){
            MotionEvent.ACTION_DOWN-&gt;{
             .]]></description><category></category></item><item><title><![CDATA[滑动冲突外部拦截法源码分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110312946</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110312946</guid><author>gacmy</author><pubDate>Sun, 29 Nov 2020 15:00:29 +0800</pubDate><description><![CDATA[为了解决滑动冲突可以采用外部拦截法,就是重写父布局的onIntercepteTouchEvent方法:ACTION_DOWN 不拦截，ACTION_MOVE,达到父元素滑动条件就拦截，达不到就不拦截

 override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        var intercpted = false
        var x = ev?.x
        var y = ev?.y
        when(e.]]></description><category></category></item><item><title><![CDATA[View事件机制几点结论探究分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110298142</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110298142</guid><author>gacmy</author><pubDate>Sun, 29 Nov 2020 00:30:40 +0800</pubDate><description><![CDATA[当前布局(ViewGroup的子类)如果重写dispatchTouchEvent不调用父类的dispatchTouchEvent方法。不管这个dispatchTouchEvent方法返回true还是false，它的子View都将不会受到任何事件。


原因:不调用父类ViewGroup的dispatchTouchEvent方法，不再有事件传递流程逻辑的进行.重写ViewGroup的dispatchTouchEvent,必须调用super.dispatchTouchevent()方法，否则事件无法传递下去
.]]></description><category></category></item><item><title><![CDATA[android基础事件流程分析]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110291916</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110291916</guid><author>gacmy</author><pubDate>Sat, 28 Nov 2020 20:29:34 +0800</pubDate><description><![CDATA[建立嵌套的布局xml
 &lt;com.g.grefresh.ViewGroup1
        android:id="@+id/parent1"
        android:orientation="vertical"
        android:layout_width="300dp"
        android:background="@android:color/holo_orange_dark"
        android:layout_height="300dp"&gt;
 ]]></description><category></category></item><item><title><![CDATA[Activity启动流程图(从Launcher启动)]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110094960</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110094960</guid><author>gacmy</author><pubDate>Tue, 24 Nov 2020 20:21:14 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[PagerAdapter changed the adapter‘s contents without calling notifyDataSetChanged]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/110086207</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/110086207</guid><author>gacmy</author><pubDate>Tue, 24 Nov 2020 16:39:33 +0800</pubDate><description><![CDATA[The application's PagerAdapter changed the adapter's
                    contents without calling PagerAdapter#`notifyDataSetChanged`!

1. 异常发生的地方
ViewPager.java
void populate(int newCurrentItem) {
    ...
     final int pageLimit = mOffscreenPageLimit;
  ]]></description><category></category></item><item><title><![CDATA[32位浮点数 存储方式 java实现]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/84319472</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/84319472</guid><author>gacmy</author><pubDate>Wed, 21 Nov 2018 14:25:47 +0800</pubDate><description><![CDATA[将一个四个字节float类型转化为内存存储格式步骤为:
31…0
31位  符号位 正数是0 负数是1
30-23位 指数部分:
0-22位   尾数部分:
下面计算指数部分 和尾数部分如何存入
1.先将这个实数的绝对值转化为二进制格式,整数转为二进制,小数转为二进制
例如8.25转为二进制
1000.01
0.4转换为二进制
0.0110011001100110…
2.将这个二进制格式实数的小数...]]></description><category></category></item><item><title><![CDATA[kotlin 复合函数 函数链式调用 以及偏函数]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83654184</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83654184</guid><author>gacmy</author><pubDate>Fri, 02 Nov 2018 13:58:36 +0800</pubDate><description><![CDATA[package kotlinall.chapter5

import java.io.OutputStream
import java.nio.charset.Charset

//复合函数
//求f(g(x))的值
val add5={i:Int-&amp;gt;i+5}
val mutilplyBy2 = {i:Int-&amp;gt; i*2}


//复合函数 扩展Function1的扩展方法 infix...]]></description><category></category></item><item><title><![CDATA[kotlin 函数闭包]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83652404</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83652404</guid><author>gacmy</author><pubDate>Fri, 02 Nov 2018 11:13:53 +0800</pubDate><description><![CDATA[
//闭包
//函数运行的环境就是闭包
//持有函数的运行环境
//函数内部可以定义函数 也可以定义类
val string = &quot;hello world&quot;
fun makeFun():()-&amp;gt;Unit{
    var count = 0
    return fun(){
        println(++count)
    }
}
fun fibonacci():()-&amp;gt;Lo...]]></description><category></category></item><item><title><![CDATA[kotlin 尾递归优化]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83652105</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83652105</guid><author>gacmy</author><pubDate>Fri, 02 Nov 2018 10:57:49 +0800</pubDate><description><![CDATA[package kotlinall.chapter5

//尾递归
//递归的一种形式
//调用自身后无其他操作
//tailrec 关键字提示编译器进行尾递归优化
data class ListNode(val value:Int,var next:ListNode? = null)

tailrec fun findListNode(head:ListNode?,value: Int):Lis...]]></description><category></category></item><item><title><![CDATA[kotlin 常用高阶函数]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83651727</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83651727</guid><author>gacmy</author><pubDate>Fri, 02 Nov 2018 10:40:42 +0800</pubDate><description><![CDATA[package kotlinall.chapter5

import java.io.BufferedReader
import java.io.FileReader
import java.lang.StringBuilder

//高阶函数 传入的参数是函数 或者返回是函数
class Hello{
    fun world(){
        println(&quot;Hello World&quot;)...]]></description><category></category></item><item><title><![CDATA[kotlin枚举和密封类]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83622095</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83622095</guid><author>gacmy</author><pubDate>Thu, 01 Nov 2018 16:04:23 +0800</pubDate><description><![CDATA[package kotlinall.chapter4

/**
 * 枚举是实例可数的类，枚举也是类
 * 可以修改构造，添加成员
 * 可以使代码清晰 但是需要一定开销
 */
enum class LogLevel(val id:Int){
    VERBOSE(1),DEBUG(4),INFO(2),WAR(3),ERROR(5),ASSERT(7);
    fun getTag():S...]]></description><category></category></item><item><title><![CDATA[kotlin内部类 匿名内部类]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83621579</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83621579</guid><author>gacmy</author><pubDate>Thu, 01 Nov 2018 15:42:35 +0800</pubDate><description><![CDATA[package kotlinall.chapter4

open class Outter{
    val a:Int = 0
    class Inner{//内部类默认 访问属性public 而且静态内部类
        fun hello(){
           // println(a) 静态内部类无法访问 非静态外部类的成员变量
        }
    }
    inne...]]></description><category></category></item><item><title><![CDATA[kotlin 扩展方法 数据类 属性代理]]></title><link>https://blog.youkuaiyun.com/gacmy/article/details/83621134</link><guid>https://blog.youkuaiyun.com/gacmy/article/details/83621134</guid><author>gacmy</author><pubDate>Thu, 01 Nov 2018 15:24:25 +0800</pubDate><description><![CDATA[package kotlinall.chapter4

import java.lang.StringBuilder
import kotlin.reflect.KProperty

//类成员可见性
//kotlin 属性默认public
//internel 模块内可见
//方法重载
/*
* Overloads
* 名称相同，参数不同的方法
* Jvm函数签名的概念:函数名,参数列表
* 跟...]]></description><category></category></item></channel></rss>