<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ming54ming的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ming54ming</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ming54ming]]></copyright><item><title><![CDATA[xlog使用]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/122528580</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/122528580</guid><author>ming54ming</author><pubDate>Wed, 16 Feb 2022 10:59:23 +0800</pubDate><description><![CDATA[对移动开发者来说，最头疼的莫过于线上出现问题，本地无法复现又没有任何日志的场景。但是考虑到应用性能，日志又

]]></description><category></category></item><item><title><![CDATA[Android 适配深色模式]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/122030554</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/122030554</guid><author>ming54ming</author><pubDate>Sun, 19 Dec 2021 21:41:06 +0800</pubDate><description><![CDATA[Android 深色模式适配
Android 10 开始支持配置深色模式，如果系统是深色主题，但是打开APP又是浅色主题就会显得格格不入。下面介绍几种适配深色模式的方法。
一、forceDarkAllowed
样式中设置 android:forceDarkAllowed 属性，深色主题下系统会自动进行适配。


新建 values-v29 目录，因为 android:forceDarkAllowed 属性 Android 10开始才有。


设置 android:forceDarkAllowed 属性为tr]]></description><category></category></item><item><title><![CDATA[数据结构和算法一一链表]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/120539689</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/120539689</guid><author>ming54ming</author><pubDate>Wed, 29 Sep 2021 00:16:03 +0800</pubDate><description><![CDATA[什么是链表
链表也是一种线性表，它和数组最大的差异在于它不需要连续的内存空间进行存储，而是通过 “指针” 将一组零散的内存块串联起来使用。

其中，我们把内存块称为链表的“结点”。为了将所有的结点串起来，每个链表的结点除了存储数据之外，还需要记录链上的下一个结点的地址。
常见的链表结构：
单链表

其中有两个结点是比较特殊的，它们分别是第一个结点和最后一个结点。我们习惯性地把第一个结点叫作头结点，把最后一个结点叫作尾结点。其中，头结点用来记录链表的基地址。有了它，我们就可以遍历得到整条链表。而尾结点特殊的地]]></description><category></category></item><item><title><![CDATA[数据结构和算法一一数组]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/120517950</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/120517950</guid><author>ming54ming</author><pubDate>Mon, 27 Sep 2021 22:47:50 +0800</pubDate><description><![CDATA[基本每一种编程语言中，都会有数组这种数据结构，虽然平时开发中用的很多，但并没有掌握它的精髓。
数组的特点
数组（Array）是一种线性表数据结构。它用一组连续的内存空间，来存储一组具有相同类型的数据。
这句话中有三个关键字 “线性表”，“连续的内存空间”，“相同类型的数据”。
线性表
顾名思义，线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组，链表、队列、栈等也是线性表结构。

而与它相对立的概念是非线性表，比如二叉树、堆、图等。之所以叫非线性，是因为，在非线性表]]></description><category></category></item><item><title><![CDATA[算法复杂度分析]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/120491603</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/120491603</guid><author>ming54ming</author><pubDate>Sun, 26 Sep 2021 22:41:39 +0800</pubDate><description><![CDATA[什么是数据结构和算法
复杂度分析
时间复杂度度
空间复杂度

]]></description><category></category></item><item><title><![CDATA[约束布局ConstraintLayout 使用]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/120410690</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/120410690</guid><author>ming54ming</author><pubDate>Wed, 22 Sep 2021 10:48:34 +0800</pubDate><description><![CDATA[ConstraintLayout 和 RelativeLayout 相似，其中所有的视图均根据同级视图与父布局之间的关系进行布局，但其灵活性要高于 RelativeLayout，适合创建复杂的大型布局。
官方教程地址：https://developer.android.google.cn/training/constraint-layout
一、基本使用
1.1 添加到项目中


在项目根目录的 build.gradle文件中声明：
    repositories {
        google()
 ]]></description><category></category></item><item><title><![CDATA[Android 屏幕适配]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/120185658</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/120185658</guid><author>ming54ming</author><pubDate>Wed, 08 Sep 2021 18:03:01 +0800</pubDate><description><![CDATA[Android 屏幕适配
Android设备多种多样，有着不同的屏幕尺寸和像素密度，大大增加了适配的难度。
一、基本单位介绍
介绍下Android UI中常见的几个单位。
px
px 就是像素点，是屏幕物理上最小显示单位，如手机分辨率 1080 x 1920 表示宽有1080 像素点，高有1920 像素点。分辨率高的屏幕上面像素点（色块）就多，所以屏幕内可以展示的画面就更细致。
但是布局的时候不能直接使用px作为单位，因为在不同分辨率的手机上，展示大小会不一样。

可以看到相同的px，在不同分辨率上显示的宽]]></description><category></category></item><item><title><![CDATA[Android 实现拖放控件]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/119186727</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/119186727</guid><author>ming54ming</author><pubDate>Wed, 28 Jul 2021 18:23:01 +0800</pubDate><description><![CDATA[类似微信朋友圈删除图片效果，示例如下：
Android 拖放框架 ，可以让用户使用图形化拖放手势移动数据。
监听拖放过程
实现 View.OnDragListener 的拖动事件监听器或其 onDragEvent(DragEvent) 回调方法来接收拖动事件。
DragEvent 操作类型




getAction() 值
含义




ACTION_DRAG_STARTED
当应用调用 startDrag() 并获取拖动阴影后，视图对象的拖动事件监听器会立即收到此事件操作类型。


ACTION_DRA]]></description><category></category></item><item><title><![CDATA[Android 获取设备名称]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/118958737</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/118958737</guid><author>ming54ming</author><pubDate>Wed, 21 Jul 2021 09:20:53 +0800</pubDate><description><![CDATA[Android 设备名称，例如：

通过Build获取
Build.DEVICE

结果是：
deviceName: HWLLD-H

明显不是设备名称，查看该参数介绍，指的是工业设计的名称。
Global.DEVICE_NAME
Settings.Global.getString(getContentResolver(), Global.DEVICE_NAME)

测试多个手机后发现，只有google pixel 手机获取是正常的，其他华为、小米等手机获取到的是手机型号：
//华为、小米等手机获取到的是手]]></description><category></category></item><item><title><![CDATA[Android 获取位置信息]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/118853081</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/118853081</guid><author>ming54ming</author><pubDate>Mon, 19 Jul 2021 18:02:24 +0800</pubDate><description><![CDATA[Android 提供 LocationManager 等相关API用于获取位置信息。
一、权限申请
1.1 APP申请定位权限
Manifest 文件中添加以下权限：
    &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&gt;
    &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt;


]]></description><category></category></item><item><title><![CDATA[微信小程序学习]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/117603406</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/117603406</guid><author>ming54ming</author><pubDate>Sun, 11 Jul 2021 23:31:38 +0800</pubDate><description><![CDATA[一、什么是微信小程序
二、项目结构
三、界面绘制
四、网络请求

]]></description><category></category></item><item><title><![CDATA[Android 权限申请]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/116801381</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/116801381</guid><author>ming54ming</author><pubDate>Sun, 30 May 2021 16:28:43 +0800</pubDate><description><![CDATA[https://www.jianshu.com/p/24f79a70025b
Android的应用权限有助于保护用户隐私，访问一些敏感数据例如

]]></description><category></category></item><item><title><![CDATA[Android修改Dialog样式]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/117041474</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/117041474</guid><author>ming54ming</author><pubDate>Sun, 23 May 2021 16:26:29 +0800</pubDate><description><![CDATA[Android 对话框支持自定义标题，内容，按钮和点击事件，基本上可以满足我们日常的使用。
但有时候我们想要修改对话框的文字，按钮颜色等，系统并没有提供对应的方法，正常情况下只能自定义布局。
接下来通过源码解析介绍几种修改 Dialog样式的方法。
一、Dialog源码解析

...]]></description><category></category></item><item><title><![CDATA[Android 数据存储]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/115794721</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/115794721</guid><author>ming54ming</author><pubDate>Fri, 23 Apr 2021 21:58:29 +0800</pubDate><description><![CDATA[一、数据存储方式介绍
Android 使用的文件系统类似于其他平台上基于磁盘的文件系统。该系统为您提供了以下几种保存应用数据的选项：

应用专属存储空间：存储仅供应用使用的文件，可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。
共享存储：存储您的应用打算与其他应用共享的文件，包括媒体、文档和其他文件。
偏好设置：以键值对形式存储私有原始数据。
数据库：使用 Room 持久性库将结构化数据存储在专用数据库中。

下表汇总了这些选项的特点：]]></description><category></category></item><item><title><![CDATA[Android ViewBinding 使用]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/115493405</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/115493405</guid><author>ming54ming</author><pubDate>Sun, 11 Apr 2021 15:14:19 +0800</pubDate><description><![CDATA[最近Android Studio 升级后 butterknife 发现一个警告:

Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes

查看官网发现：

butterknife已经弃用，建议使用 view binding 替换。
一、什么是view binding
官方介绍：

通过视图绑定功能，您可以更轻松地编写可与视图交互的代码。在模]]></description><category></category></item><item><title><![CDATA[JNI创建线程]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/115426825</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/115426825</guid><author>ming54ming</author><pubDate>Sun, 04 Apr 2021 13:38:34 +0800</pubDate><description><![CDATA[作为一个Android开发，或多或少都会接触到JNI，有时候需要创建线程做一些特别的操作。
一、创建线程
#include &lt;jni.h&gt;
#include &lt;android/log.h&gt;
//添加头文件
#include &lt;pthread.h&gt;


#define  LOG_TAG    "nativethread"
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS_]]></description><category></category></item><item><title><![CDATA[JNI异常找不到native方法的实现]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/115418161</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/115418161</guid><author>ming54ming</author><pubDate>Sun, 04 Apr 2021 10:44:15 +0800</pubDate><description><![CDATA[今天遇到了一个很奇怪的问题，调用 native 方法时，报了下面这个错误：
java.lang.UnsatisfiedLinkError: No implementation found for 方法

就如同字面上的意思，找不到该 native 方法的实现，头疼的是这个崩溃只有一台手机上会出现。

在 JNI_OnLoad 方法中加了日志，发现没有打印。
创建新的动态库，发现可以正常调用，只有这个动态库有问题。
在组长的提示下，修改了动态库名称，发现正常了。原先动态库的名称是 utils 应该是和系统其他]]></description><category></category></item><item><title><![CDATA[Android Studio 动态调试apk]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/115049718</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/115049718</guid><author>ming54ming</author><pubDate>Sun, 21 Mar 2021 20:16:46 +0800</pubDate><description><![CDATA[一、什么是动态调试
其实是动态调试 Smail文件 ，一种逆向分析的方式，通过 jdwp 调试相关进程。
一般在做竞品分析时会用到类似的手段。Android studio支持apk分析，所以操作起来还是比较简单的。
二、前期准备
2.1 使apk可调试
正常情况下release包是不允许调试的，所以必须先让apk可调试，一般有两种方法：

使用 apktool 工具反编译apk，修改 AndroidManifest.xml 文件，然后再重签名二次打包：

  &lt;!-- application标签加上a]]></description><category></category></item><item><title><![CDATA[Android 通知栏]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/114808305</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/114808305</guid><author>ming54ming</author><pubDate>Sun, 14 Mar 2021 23:23:29 +0800</pubDate><description><![CDATA[不同版本通知栏的创建方式不尽相同，当前官方推荐使用 NotificationCompat 相关的API，兼容到Android 4.0，但是部分新功能，比如内嵌回复操作，旧版本是无法支持的。
一、设置通知内容
	//CHANNEL_ID，渠道ID，Android 8.0及更高版本必须要设置
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    		//设置小图标
       ]]></description><category></category></item><item><title><![CDATA[MPAndroidChart 修改柱状图高亮效果]]></title><link>https://blog.youkuaiyun.com/ming54ming/article/details/114487617</link><guid>https://blog.youkuaiyun.com/ming54ming/article/details/114487617</guid><author>ming54ming</author><pubDate>Sun, 07 Mar 2021 19:20:29 +0800</pubDate><description><![CDATA[MPAndroidChart 默认的选中背景如下：

只是颜色加深，然后设计想要实现下面这种效果：

类似阴影效果，且显示的宽度需要增加。
一、MPAndroidChart 是否支持
查看该框架对外的接口，发现下面两个方法：
 BarDataSet set1 = new BarDataSet(yValues, "");
 set1.setHighLightColor(ContextCompat.getColor(this, R.color.black));
 set1.setHighLightAlpha(4]]></description><category></category></item></channel></rss>