<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LvLuffy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LvLuffy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LvLuffy]]></copyright><item><title><![CDATA[mac Android Studio配置adb环境(使用adb报错 adb: command not found)]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/154433187</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/154433187</guid><author>LvLuffy</author><pubDate>Wed, 05 Nov 2025 11:30:37 +0800</pubDate><description><![CDATA[1、打开mac终端或者启动 Android Studio 的Terminal。可以在Tools-SDK Manager中查看sdk路径，如下图所示。7、可以输入下面的命令来判断是否配置成功。3、创建.bash_profile文件。4、打开.bash_profile文件。2、进入当前用户home目录。8、出现版本信息则配置成功。]]></description><category></category></item><item><title><![CDATA[Android知名三方库]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/104059200</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/104059200</guid><author>LvLuffy</author><pubDate>Tue, 21 Jan 2020 10:19:46 +0800</pubDate><description><![CDATA[Libraries简介

Mvp 是 Google 官方出品的 Mvp 架构项目，含有多个不同的架构分支(此为 Dagger 分支).
Dagger2 是 Google 根据 Square 的 Dagger1 出品的依赖注入框架，通过 Apt
编译时生成代码，性能优于使用运行时反射技术的依赖注入框架.
RxJava 提供优雅的响应式 API 解决异步请求以及事件处理.
RxAndroid 为 An...]]></description><category></category></item><item><title><![CDATA[Java Android中常见的比较]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103617842</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103617842</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 17:27:53 +0800</pubDate><description><![CDATA[Java篇
1，HashMap和HashTable的区别
2，HashMap与HashSet的区别
3，ArrayList和LinkedList的区别
4，StringBuffer和StringBuilder、String的区别
5，int和Integer的区别
6，重写和覆盖的区别
7，成员变量和局部变量的区别以及形参问题
8，==和equals和hashCode的区别
9，Serializab...]]></description><category></category></item><item><title><![CDATA[App优化（五）电量优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103616247</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103616247</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 17:03:39 +0800</pubDate><description><![CDATA[引言
电量使用优化, 基本上是我们最不怎么关注的一项优化. 可能很多公司连QA/Tester也不会关注测试App电量的使用. 一般来说开发和测试的测试设备也一直是连着USB处于充电状态的, 感官上也体会不到电量的损耗.
然而, 对于用户来说, 实际上App的电量损耗也是用户体验的一个方面. 特别是当今人们对移动设备的依赖度越来越高, 电量也是用户特别关注的.
今天我们就来聊聊Android App...]]></description><category></category></item><item><title><![CDATA[App优化（六）网络优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103616798</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103616798</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 16:44:51 +0800</pubDate><description><![CDATA[引言
互联网时代, App作为于用户交互的端, 可以说实际上是一个界面, 产品的业务, 服务都是由Server提供的. 而App与Server的交互依赖于网络, 故而网络优化, 也是我们的App优化中不可缺少的一个优化项.
1, 网络连接对用户的影响
App的网络连接对于用户来说, 影响很多, 且多数情况下都很直观, 直接影响用户对这个App的使用体验. 其中较为重要的几点:

流量 App的流量...]]></description><category></category></item><item><title><![CDATA[App优化（四）内存优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103615991</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103615991</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 15:57:51 +0800</pubDate><description><![CDATA[引言
系列终于走到了内存这里了.内存问题, 一直是Android App开发中比较困扰的问题. 灾难性, 难以复现, 难以定位. 内存管理的知识也相对生涩, 很多工具的使用需要对一些内存相关的专有名词有一定了解, 例如GC Roots, Heap, Stack, Shallow Size, Retained Size, Depth等等.
计划
整理了之前的笔记, 也查阅了相关资料, 发现这块内容还...]]></description><category></category></item><item><title><![CDATA[App优化（三）ANR优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103614510</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103614510</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 15:38:33 +0800</pubDate><description><![CDATA[上篇：ANR详解
1，你碰到ANR了吗？
在App使用过程中, 你可能遇到过这样的情况:

恭喜你, 这就是传说中的ANR.
1.1 何为ANR
ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框.
1.2 为什么会产生ANR
在Android里, App的响应能力是由Activity ...]]></description><category></category></item><item><title><![CDATA[App优化（二）布局优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103613582</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103613582</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 14:22:59 +0800</pubDate><description><![CDATA[1，分析
analyze-&gt;inspect code
2，怎么优化布局
2-1：尽量减少布局层级和复杂度
2-1-1：尽量不要嵌套使用RelativeLayout。
2-1-2：尽量不要在嵌套的LinearLayout中都使用weight属性。
2-1-3：Layout的选择, 以尽量减少View树的层级为主。
2-1-4：去除不必要的父布局。
2-1-5：善用TextView的Drawab...]]></description><category></category></item><item><title><![CDATA[App优化（一）App启动速度优化]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103613125</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103613125</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 14:03:38 +0800</pubDate><description><![CDATA[1，代码分析
因为这个App集成了Bugly, Push, Feedback等服务, 所以Application的onCreate有很多第三方平台的初始化工作…
public class GithubApplication extends MultiDexApplication {

    @Override
    public void onCreate() {
        super....]]></description><category></category></item><item><title><![CDATA[Android 统计启动时长]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103609187</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103609187</guid><author>LvLuffy</author><pubDate>Thu, 19 Dec 2019 10:05:54 +0800</pubDate><description><![CDATA[1，启动类型
1&gt;.冷启动：当启动应用时，后台没有该应用的进程，这时系统会重新创建一个新的进程分配给该应用，这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它，所以会先创建和初始化 Application 类，再创建和初始化 MainActivity 类，最后显示在界面上。
2&gt;.热启动：当启动应用时，后台已有该应用的进程（例：按back键、home键，应用虽然会退出...]]></description><category></category></item><item><title><![CDATA[内存泄露]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103602248</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103602248</guid><author>LvLuffy</author><pubDate>Wed, 18 Dec 2019 18:39:27 +0800</pubDate><description><![CDATA[1. 内存泄露原因
当一个对象不再被使用，在回收时另一个正在使用的对象持有它的引用导致本该被回收的对象不能被回收而留在堆内存中，就产生了内存泄露。
说白了，该对象无法被回收的原因就是被一个生命周期更长的对象引用了。
其实内存泄露就是一句话，生命周期较长的对象持有生命周期较短的引用。
2. 内存泄露影响
1&gt;：Android系统给每个应用程序分配内存有限，如果app超过系统分配给它的内存，造成...]]></description><category></category></item><item><title><![CDATA[SP（SharedPreferences）是进程同步的吗?有什么方法做到同步？]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/103601911</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/103601911</guid><author>LvLuffy</author><pubDate>Wed, 18 Dec 2019 17:45:03 +0800</pubDate><description><![CDATA[## SP（SharedPreferences）是进程同步的吗?有什么方法做到同步？
1，SharedPreferences不支持进程同步
一个进程的情况，经常采用SharePreference来做，但是SharePreference不支持多进程，它基于单个文件的，默认是没有考虑同步互斥，而且，APP对SP对象做了缓存，不好互斥同步。
MODE_MULTI_PROCESS的作用是什么?
在getS...]]></description><category></category></item><item><title><![CDATA[万能注释模板]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/81332228</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/81332228</guid><author>LvLuffy</author><pubDate>Wed, 01 Aug 2018 15:53:15 +0800</pubDate><description><![CDATA[代码的注释是我们平时必须面对的问题，今天我们就来看看如何自定义属于自己的注释模板。提高我们的开发效率。



2、打开相应位置

File–&amp;gt;Setting–&amp;gt;Editor–&amp;gt;LiveTemplate：

2、新建一个Live Group

点击右边的+号，选择Template Group,命名自己的一个注释包。我自己命名为author。





3、新建一个LIve Temp...]]></description><category></category></item><item><title><![CDATA[Fiddler4——手机抓包]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/81330980</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/81330980</guid><author>LvLuffy</author><pubDate>Wed, 01 Aug 2018 15:07:07 +0800</pubDate><description><![CDATA[一、下载工具包

百度搜索”fiddler 下载“ ，安装最新版本



下载的软件安装包为“fiddler_4.6.20171.26113_setup.exe”格式，双击安装。安装成功，在“开始”-“所有程序”，就会看见这样的图标，若是常用的话，也可以在桌面建一个快捷方式，如下图：



二、fiddler手机抓包原理

在本机开启了一个http的代理服务器，然后它会转发所有的http请求和响应...]]></description><category></category></item><item><title><![CDATA[Android权限]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/81196915</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/81196915</guid><author>LvLuffy</author><pubDate>Wed, 25 Jul 2018 10:00:41 +0800</pubDate><description><![CDATA[关于Android权限，自6.0系统之后实行动态权限管理，大致分为两大类：普通权限、危险权限。

普通权限



//
public static final String READ_CALENDAR = &amp;quot;android.permission.READ_CALENDAR&amp;quot;;

public static final String WRITE_CALENDAR = &amp;quot;android.permiss...]]></description><category></category></item><item><title><![CDATA[Android系统版本号和Android API level对应表]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/81196363</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/81196363</guid><author>LvLuffy</author><pubDate>Wed, 25 Jul 2018 09:36:57 +0800</pubDate><description><![CDATA[28——Android 9——2018-07-02
27——Android 8.1——2017-12-05
26——Android 8.0——2017-08-21
25——Android 7.1——2016-10-04
24——Android 7.0——2016-08-22
23——Android 6.0——2015-10-05
22——Android 5.1——2015-03-09
21——An...]]></description><category></category></item><item><title><![CDATA[Git的使用--上传本地项目到Github]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/80166458</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/80166458</guid><author>LvLuffy</author><pubDate>Wed, 02 May 2018 14:49:47 +0800</pubDate><description><![CDATA[前言

在项目开发初期，我们一般会先在本地创建一个项目，搭好相对适合公司业务的项目框架，在这之后会上传到相应的项目管理平台进行托管，常用的有svn、git，下面我们就主要来说一下使用命令行将“本地项目上传到git”的具体流程吧。

git的安装就不说了；如果需要请百度。

1. 我们需要先创建一个本地的版本库（其实也就是一个文件夹）。

你可以直接右击新建文件夹，也可以右击打开Git bash命令...]]></description><category></category></item><item><title><![CDATA[IDEA文件查找功能Enter file name失效]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/79892602</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/79892602</guid><author>LvLuffy</author><pubDate>Wed, 11 Apr 2018 10:28:30 +0800</pubDate><description><![CDATA[描述：由于强制关机，IDEA文件查找功能（ctrl+shift+N）弹出的Enter file name失效，无法查询出需要的文件。



步骤：


问题分析

分析下原因，很大可能性是由于强制关机后索引丢失，导致搜索功能失效。
解决方案：

可以点击File,找到Invalidate Caches /Restart按钮，务必保存好当前编辑代码后点击重启


...]]></description><category></category></item><item><title><![CDATA[Android PDF文件阅读方案]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/79856121</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/79856121</guid><author>LvLuffy</author><pubDate>Sun, 08 Apr 2018 18:48:02 +0800</pubDate><description><![CDATA[方案一：在线阅读（使用Google doc支持来展示word,excel,pdf,txt）WebView urlWebView = (WebView)findViewById(R.id.containWebView);
urlWebView.setWebViewClient(new AppWebViewClients());
urlWebView.getSettings().setJavaScrip]]></description><category></category></item><item><title><![CDATA[Android 第三方支付]]></title><link>https://blog.youkuaiyun.com/LvLuffy/article/details/79819922</link><guid>https://blog.youkuaiyun.com/LvLuffy/article/details/79819922</guid><author>LvLuffy</author><pubDate>Wed, 04 Apr 2018 17:07:18 +0800</pubDate><description><![CDATA[前言：作为一个Android开发，必不可少的要接触到支付功能，面对支付，我的观念还是老样子，一次接入多次使用，这就体现出了封装的必要性了，目前国内常见的支付有四个：银联银行、支付宝、微信支付、QQ钱包，下面我就来集成一下支付宝、微信支付、QQ钱包三个平台的支付。微信支付：流程图：开发步骤：
后台设置 
商户在微信开放平台申请开发应用后，微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安]]></description><category></category></item></channel></rss>