<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[明天的增加的博客]]></title><description><![CDATA[一切都是最好的安排]]></description><link>https://blog.youkuaiyun.com/StudyOfAndroid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; StudyOfAndroid]]></copyright><item><title><![CDATA[Android 埋点解决方案]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110929555</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110929555</guid><author>StudyOfAndroid</author><pubDate>Wed, 09 Dec 2020 16:48:18 +0800</pubDate><description><![CDATA[Android埋点存在两种方案，一种是全埋点方案，就是埋点全部自动收集数据，无需开发者写代码，实现方案会很复杂，单模块的开发者控制不了逻辑；二是自埋点方案，大部分的埋点数据都是通过开发者自己埋入信息，自由度很高。具体方案应该说适合的才是最好的。
一、全埋点方案
无需Android应用程序开发工程师写代码或者只写少量的代码，就能预先自动收集用户的所有行为数据，然后根据实际的业务分析需求从中筛选出所需行为数据并进行分析。
全埋点采集事件分为4中：（事件名称前面的$符号，指事件是预置事件，与之对应的是自定义事件）]]></description><category></category></item><item><title><![CDATA[EventBus2和EventBus3的使用和原理介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110915399</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110915399</guid><author>StudyOfAndroid</author><pubDate>Wed, 09 Dec 2020 15:31:25 +0800</pubDate><description><![CDATA[EventBus已经发展到第三版了，对于它的使用和原理相对于之前也有了很大的改进。下面就介绍一下EventBus2和EventBus3的使用和原理
说明：方法上面的参数设置
threadMode：线程工作状态，表示方法在哪个线程执行
ThreadMode.POSTING:默认的设置，表示发送消息在哪个线程，就在哪个线程执行方法
ThreadMode.MAIN:主线程执行该方法
ThreadMode.MAIN_ORDERED:也是在主线程执行，只是不会阻塞主线程
ThreadMode.BACKGROUND:后]]></description><category></category></item><item><title><![CDATA[Android View分析（五）—— 动画介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110873033</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110873033</guid><author>StudyOfAndroid</author><pubDate>Tue, 08 Dec 2020 15:33:47 +0800</pubDate><description><![CDATA[动画分为三种
1、传统的平移类动画
只是改变控件的视觉效果，但是实际位置没有变动，主要使用的类是TranslateAnimation（平移）、ScaleAnimation（缩放）、RotateAnimation（旋转）、AlphaAnimation（透明度）
2、帧动画
多张图片播放，这种需要控制图片的大小，不然容易oom
3、属性动画
3.1 ObjectAnimator动画
改变整体控件的位置，类似于传统的平移动画效果，继承ValueAnimator类，对他的封装，主要使用ObjectAnimator类]]></description><category></category></item><item><title><![CDATA[Android View分析（四）—— 自定义View]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110872618</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110872618</guid><author>StudyOfAndroid</author><pubDate>Tue, 08 Dec 2020 14:27:48 +0800</pubDate><description><![CDATA[自定义控件实现画圆从0到360度的动画效果
public class SelfView extends View {
    private final String TAG = "SelfView";
    private Paint mPaint;

    private int startX = 0;
    private int startY = 0;
    /**
     * 控制动画只执行一次，否则动画会无限制执行下去
     */
    private boolean anima]]></description><category></category></item><item><title><![CDATA[Android 一键退出app]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110872529</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110872529</guid><author>StudyOfAndroid</author><pubDate>Tue, 08 Dec 2020 14:25:35 +0800</pubDate><description><![CDATA[1、使用eventbus实现一键退出APP
public abstract class BaseActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getNeedEventBus()) {
            EventBus.getDefault(]]></description><category></category></item><item><title><![CDATA[Android 虚拟机存储结构和垃圾回收机制介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110530217</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110530217</guid><author>StudyOfAndroid</author><pubDate>Thu, 03 Dec 2020 14:22:42 +0800</pubDate><description><![CDATA[虚拟机的存储结构分为5个部分，分别是程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区，下面就 介绍各部分的内容。
程序计数器：较小的内存空间，指定当前线程执行字节码的行数
Java虚拟机栈：线程私有的，生命周期与线程同步，每个方法执行的时候，都会创建一个栈帧，用于存储局部变量表、操作数栈、动态链接、方法出入口等信息，每个方法的调用都是栈帧入栈到出栈的过程。局部变量表用于存储方法相关的局部变量，包括基本数据、对象引用和返回地址等。栈深度大于虚拟机允许的深度，会抛出StackOverFlowErro]]></description><category></category></item><item><title><![CDATA[Android 线程介绍（二）—— 常用线程池介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110529648</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110529648</guid><author>StudyOfAndroid</author><pubDate>Thu, 03 Dec 2020 14:09:12 +0800</pubDate><description><![CDATA[线程池创建参数介绍：
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue&lt;Runnable&gt; workQueue,
]]></description><category></category></item><item><title><![CDATA[Android线程介绍（一）—— Java线程优先级和Android线程优先级对比]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110382670</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110382670</guid><author>StudyOfAndroid</author><pubDate>Mon, 30 Nov 2020 11:40:16 +0800</pubDate><description><![CDATA[android开发过程中，线程优先级存在两种设置方法，一是Java的设置方法，二是android提供的设置方法。
一、Java线程优先级设置方法
Thread thread1 = new Thread();
thread1.setPriority(10);

内部调用的也是底层的方法
public final void setPriority(int newPriority) {
        ThreadGroup g;
        checkAccess();
        if (newPri]]></description><category></category></item><item><title><![CDATA[Android ANR出现原因和解决方法]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110133208</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110133208</guid><author>StudyOfAndroid</author><pubDate>Wed, 25 Nov 2020 17:20:19 +0800</pubDate><description><![CDATA[ANR：Application Not Responding，应用无响应，在一定时间内，用户的操作没有给出回应，就会导致ANR。
首先要明确一个概念：ANR只会出现在主线程中，也就是说Activity、Service、BroadcastReceiver、ContentProvider的生命周期方法都是在主线程中执行的，系统通过AMS和WMS对操作时间进行检测，超出时间就会报ANR，并且弹出对话框提示用户。
以下代码都是基于 Android 10.0（29），其他版本的代码位置需要自己去查找了
Activit]]></description><category></category></item><item><title><![CDATA[Android 框架系列（一）—— 框架概要篇]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110124558</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110124558</guid><author>StudyOfAndroid</author><pubDate>Wed, 25 Nov 2020 14:52:44 +0800</pubDate><description><![CDATA[android开发避免不了的就是框架的搭建，我们熟知的MVC、MVP、MVVM，都是我们熟知的框架结构，开发中使用哪种结构，结构如何搭建，这种结构使用过程中存在的优缺点，这些都是我们需要考虑的。下面就讲解一下这些框架的知识。
1、MVC
1.1 MVC结构图

1.2 MVC各部分的功能
View：布局展示部分，这部分是和用户直接交互的，展示各种控件效果，包括动画、布局中展示的数据等部分。Android中布局都是定义在xml文件中的，但是如果需要对数据进行展示就需要在Activity中对布局中的控件进行操作]]></description><category></category></item><item><title><![CDATA[Android WorkManager让app保活]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110121374</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/110121374</guid><author>StudyOfAndroid</author><pubDate>Wed, 25 Nov 2020 11:31:54 +0800</pubDate><description><![CDATA[使用WorkManager保活，即使应用被杀掉，也是可以继续执行代码的，目前运行环境是模拟器，具体国内各厂商能否执行，未经过实际测试，就不说了。
我们首先定义Worker类，用来发送通知，然后点击通知可以打开Activity，当然我们也可以做其他的操作。
public class UploadWorker extends Worker {
    public UploadWorker(@NonNull Context context, @NonNull WorkerParameters workerPar]]></description><category></category></item><item><title><![CDATA[Android Retrofit实现原理解析]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109817526</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109817526</guid><author>StudyOfAndroid</author><pubDate>Thu, 19 Nov 2020 17:33:24 +0800</pubDate><description><![CDATA[整个解析过程

以下代码都是基于
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"

动态代理就是通过以下代码：
public &lt;T&gt; T create(final Class&lt;T&gt;]]></description><category></category></item><item><title><![CDATA[Android JetPack介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109776902</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109776902</guid><author>StudyOfAndroid</author><pubDate>Wed, 18 Nov 2020 16:59:07 +0800</pubDate><description><![CDATA[2017年，google开发者大会介绍了JetPack，表示google要开始统一开发规范，推荐开发者都使用JetPack内部的各项功能，之前的都会逐渐的depreated，下面就介绍一下JetPack内容：
分为四个部分：

基础 - Foundation
提供最基础的底层功能，如向后兼容性、测试、开发语言kotlin支持等

架构 - Architecture
帮助开发者设计稳健、可测试且易维护的应用

google推荐的架构是

这个架构在我们创建project或者module的时候，就会推荐创建

]]></description><category></category></item><item><title><![CDATA[Android packageManager.setComponentEnabledSetting()和setApplicationEnabledSetting()方法介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109678471</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109678471</guid><author>StudyOfAndroid</author><pubDate>Fri, 13 Nov 2020 17:30:34 +0800</pubDate><description><![CDATA[1、setComponentEnabledSetting()方法
PackageManager提供了一个方法，setComponentEnabledSetting(),这个方法的作用是启用或者禁用四大组件，比如我们想禁用一个服务，就可以使用下面的方法，传入的参数就是服务的名称。
/**
 * 禁用组件
 * @param context 上下文
 * @param className 组件类名
 */
private fun disableComponent(context: Context, classN]]></description><category></category></item><item><title><![CDATA[Android 序列化原理介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109637356</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109637356</guid><author>StudyOfAndroid</author><pubDate>Thu, 12 Nov 2020 10:49:04 +0800</pubDate><description><![CDATA[无论是android中还是Java中，远程传递数据都是需要序列化的，android中不同组件之间传递数据也是需要序列化的。
1、序列化和反序列化
序列化和反序列化是一个过程，这个过程其实就是我们给数据加一层标识，告诉虚拟机序列化的时候该怎么给数据加壳，反序列化的时候该怎么将数据的壳去掉，取出其中的数据。
实现序列化的方式有两种：Serializable接口和Parcelable接口
2、Serializable接口
Java提供的接口，主要用于文件读写和网络传输数据，也可以用于android组件之间传递数据]]></description><category></category></item><item><title><![CDATA[Android 进程间通信IPC（二）—— Broadcast广播]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109623370</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109623370</guid><author>StudyOfAndroid</author><pubDate>Wed, 11 Nov 2020 16:22:17 +0800</pubDate><description><![CDATA[从3个方面来讲解广播
1、注册方式
广播的注册方式分为两种，一是动态注册，二是静态注册，注册时候都需要设置action，需要和发送广播时候设置的action对应，否则接收不到发送的广播
动态注册：
BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
            ]]></description><category></category></item><item><title><![CDATA[Android 进程间通信IPC（一） —— 概要篇]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109614747</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109614747</guid><author>StudyOfAndroid</author><pubDate>Wed, 11 Nov 2020 14:37:35 +0800</pubDate><description><![CDATA[android IPC（进程间通信），因为在Linux系统中，每一个应用都是一个进程，所以不同的应用之间通信就需要采用IPC，android系统是基于Linux系统开发的，所以每个app也是一个进程，不同app之间通信也是要用到IPC的，android系统大部分IPC都是基于binder的，很多都是封装好的基于不同场景的应用。
在android系统中存在几种方式：Bundle（通过Intent传递）、AIDL、ContentProvider、Broadcast、文件、socket
bundle：是实现Par]]></description><category></category></item><item><title><![CDATA[Android 性能分析（一）—— 概要篇]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109526312</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109526312</guid><author>StudyOfAndroid</author><pubDate>Fri, 06 Nov 2020 15:50:18 +0800</pubDate><description><![CDATA[最近需要对app进行性能分析，一开始的时候，都是根据网上的各种文章参考，但是很多都是只是介绍概念，没有介绍使用什么工具以及什么样效果需要进行优化，因为我们对app优化肯定是要达到什么样的效果，必须给出一篇优化文档的，我们目前是什么样的效果，经过优化过后达到什么样的预期效果，这样领导才会同意你去安排开发和测试抽出时间去进行优化，并且各个模块能达到什么样的效果都是需要进行统计的，这都是需要时间去安排的，这种就很可能导致产品提的需求和优化时间冲突了，需求就要延期，开发领导去和产品领导扯皮，一堆麻烦事，因此我们必须]]></description><category></category></item><item><title><![CDATA[Android 性能优化（二）—— 通过工具检测内存分析情况]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109515310</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109515310</guid><author>StudyOfAndroid</author><pubDate>Thu, 05 Nov 2020 17:02:26 +0800</pubDate><description><![CDATA[app性能优化包括很多方面，其中重要的部分就是内存分析，主要是分析是否存在内存泄露，下面就是通过几种工具进行分析：
1、Lint：android studio自带分析工具，可以进行检测，常见的内存泄露可以检测出来

2、LeakCanary：内存泄露检测工具，只要app集成了LeakCanary，当app启动时候，出现内存泄露就会在通知栏发送通知，开发者就可以点进去查看具体的内存泄露详细信息，包括具体问题在哪一行

3、Memory Profile：Android studio自带的分析工具，可以查看当前a]]></description><category></category></item><item><title><![CDATA[android binder入门（三）——设计原理和模型介绍]]></title><link>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109495337</link><guid>https://blog.youkuaiyun.com/StudyOfAndroid/article/details/109495337</guid><author>StudyOfAndroid</author><pubDate>Wed, 04 Nov 2020 17:51:32 +0800</pubDate><description><![CDATA[1、优势
android是在Linux基础上进行开发出的一套系统，Linux进程间通信包括几种方式：共享内存、管道、socket、消息队列、binder。
共享内存：优点就是无需进行拷贝数据，客户端和服务端都可以直接对内存中的数据进行操作，这样操作读取速度很快，但是需要很大的内存，并且安全性无法保证，任何app都可以操作这部分数据，导致数据很乱
管道、socket、消息队列：操作过程都是，服务端先将数据copy到内核缓存区，客户端需要数据操作的时候，也要将内核缓存区的数据copy到自己的内存空间内，这就进行]]></description><category></category></item></channel></rss>