<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Kitty_Landon的专栏]]></title><description><![CDATA[正在充电......]]></description><link>https://blog.youkuaiyun.com/Kitty_Landon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Kitty_Landon]]></copyright><item><title><![CDATA[Android 预置应用]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/54584772</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/54584772</guid><author>Kitty_Landon</author><pubDate>Tue, 03 Apr 2018 16:42:39 +0800</pubDate><description><![CDATA[Android如何将第三方应用预置到手机中？分析下该需求，预置第三方应用，要求可卸载，恢复出厂设置后可恢复这些应用。就需要将这些应用预置到system下面，如果放到data下面恢复出厂设置后就不能恢复这些应用了。
一、代码设计
1、创建“/system/presetapp”目录，将预置应用保存到该目录下。
2、在PackageManagerService的构造方法里创建PresetApp的对]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- 布局优化]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79398100</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79398100</guid><author>Kitty_Landon</author><pubDate>Thu, 01 Mar 2018 14:14:25 +0800</pubDate><description><![CDATA[一、前言
根据Google官方出品的Android性能优化典范，60帧每秒是目前最合适的图像显示速度，事实上绝大多数的Android设备也是按照每秒60帧来刷新的。为了让屏幕的刷新帧率达到60fps，我们需要确保在时间16ms（1000/60HZ）内完成单次刷新的操作（包括measure、layout、draw），这也是Android系统每隔16ms就会发出一次VSYNC信号触发对UI进行渲染的]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- 应用启动优化之启动页设计]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79291288</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79291288</guid><author>Kitty_Landon</author><pubDate>Thu, 08 Feb 2018 18:01:39 +0800</pubDate><description><![CDATA[上篇博客我们学习了应用启动优化的一些优化思路，经过这些优化后，如果还不能达到你的要求，我们一般会做个启动页。因为启动页一般View数量比较少，业务逻辑比较简单，因此启动比较快。一、设计思路常规启动页设计思路通常点击桌面就会执行Application中的逻辑，然后会跳入启动页SplashActivity，通常展示一个图片和logo，然后2或3秒后，并且SplashActivity里面可以去做一些Ma...]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- 应用启动优化]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79276612</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79276612</guid><author>Kitty_Landon</author><pubDate>Wed, 07 Feb 2018 16:26:06 +0800</pubDate><description><![CDATA[应用的启动

启动方式


通常来说，在Android中应用的启动方式分为两种：冷启动和热启动。

1、冷启动：当启动应用时，后台没有该应用的进程，这时系统会重新创建一个新的进程分配给该应用，这个启动方式就是冷启动。
2、热启动：当启动应用时，后台已有该应用的进程（例：按back键、home键，应用虽然会退出，但是该应用的进程依然会保留在后台，可进入任务列表查看），所以在已有进程的]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- 应用启动优化之DelayLoad]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79235418</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79235418</guid><author>Kitty_Landon</author><pubDate>Tue, 06 Feb 2018 11:34:03 +0800</pubDate><description><![CDATA[对于应用启动优化，其实核心思想就是在启动过程中少做事情，具体实践的时候无非就是下面几种：
    1. 异步加载；
    2. 延时加载；
    3. 懒加载。
    我们这篇博客主要学习一下一种延时加载（DelayLoad）的实现及其原理。DelayLoad的实现是非常简单的，但是原理比较复杂，其中还涉及到Looper、Handler、MessageQueue、VSYNC等。
一]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- Memory Monitor工具检测内存泄露]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79227548</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79227548</guid><author>Kitty_Landon</author><pubDate>Fri, 02 Feb 2018 09:01:24 +0800</pubDate><description><![CDATA[这里我们通过一个例子来学习Memory Monitor工具的使用。
示例

package com.android.test;

import android.content.Context;

public class UserManger {

    public static UserManger instance;

    private Context mContext;

 ]]></description><category></category></item><item><title><![CDATA[Android 从setContentView谈Activity界面的加载过程]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78626900</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78626900</guid><author>Kitty_Landon</author><pubDate>Wed, 31 Jan 2018 16:05:37 +0800</pubDate><description><![CDATA[Android窗口
    先来了解下Android系统的窗口布局。当我们设置窗口的Theme为可见样式时，Android的窗口如下图：


    查看Activity的源码，Activity中有一个私有成员Window（mWindow），而Window是一个抽象类，它提供了绘制窗口的一组通用API（如下第一段代码）；PhoneWindow继承自Window，是Window的具体实现类；]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- Systrace工具]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79192377</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79192377</guid><author>Kitty_Landon</author><pubDate>Tue, 30 Jan 2018 10:43:18 +0800</pubDate><description><![CDATA[Systrace简介
    一般来说，我们的机器以60帧/秒显示时，用户会感觉机器很流畅，如果显示时出现丢帧的情况，需要知道当前整个系统所处的状态，这个时候Systrace便是最佳的工具选择。
    Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统（如Surfaceflinger、WindowManagerService等fr]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- TraceView工具]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79148670</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79148670</guid><author>Kitty_Landon</author><pubDate>Fri, 26 Jan 2018 13:31:39 +0800</pubDate><description><![CDATA[TraceView是什么
    TraceView是Android SDK中内置的一个数据采集和分析工具，它可以加载trace文件，用图形的形式展示代码的执行时间、次数及调用栈，找出最需要优化的点。
    trace文件是log信息文件的一种，可以通过代码，Android Studio，或者DDMS生成。
    TraceView从代码层面分析性能问题，针对每个方法来分析，比如当我们发]]></description><category></category></item><item><title><![CDATA[Android性能优化 -- 内存管理机制]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79128956</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79128956</guid><author>Kitty_Landon</author><pubDate>Wed, 24 Jan 2018 09:27:28 +0800</pubDate><description><![CDATA[1、初识内存优化
在Android的性能优化的各个部分里，内存的问题绝对是最令人头疼的一部分，虽然Android有垃圾自动回收机制不需要手动干预，但也正因为此，出现内存问题，如内存泄漏和内存溢出等，如果对内存管理机制不熟悉，会更加难以排查问题。
因为内存方面的知识较多且不易理解，内存优化部分就分两篇文章进行，本文主要是关于Java、Android的内存分配、回收、GC等理论知识。
2、内存分]]></description><category></category></item><item><title><![CDATA[Android应用管理四 -- APK包的安装、卸载和优化（PackageManagerService）]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79106443</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79106443</guid><author>Kitty_Landon</author><pubDate>Tue, 23 Jan 2018 17:52:03 +0800</pubDate><description><![CDATA[http://www.oneplusbbs.com/thread-759852-1-1.htmlhttp://blog.youkuaiyun.com/kc58236582/article/details/53393570什么是ODEX？Android应用程序中有一个叫做classes.dex的文件，这是Java源码经过ADT的编译后会转换出来的。它是Android系统中可以在Dalvik虚拟机上直接运行的文件]]></description><category></category></item><item><title><![CDATA[Android7.0 Doze模式]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78977092</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78977092</guid><author>Kitty_Landon</author><pubDate>Thu, 18 Jan 2018 17:23:09 +0800</pubDate><description><![CDATA[在Android M中，Google就引入了Doze模式。它定义了一种全新的、低能耗的状态。在该状态，后台只有部分任务被允许运行，其它任务都被强制停止。这里我们就来分析一下Android 7.0中Doze模式相关的流程。基本原理基本原理        Doze模式可以简单概括为：        若判断用户在连续的一段时间内没有使用手机，就延缓终端中APP后台的CPU和网络活动，以达到减少电量消耗的]]></description><category></category></item><item><title><![CDATA[Android事件分发机制]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79036059</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79036059</guid><author>Kitty_Landon</author><pubDate>Mon, 15 Jan 2018 18:15:28 +0800</pubDate><description><![CDATA[UI界面组成

/**
 * Abstract base class for a top-level window look and behavior policy.  An
 * instance of this class should be used as the top-level view added to the
 * window manager. It provides sta]]></description><category></category></item><item><title><![CDATA[Java虚拟机内存管理（二）--垃圾收集器及内存分配策略]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78738441</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/78738441</guid><author>Kitty_Landon</author><pubDate>Thu, 11 Jan 2018 14:51:59 +0800</pubDate><description><![CDATA[概述
    Java内存运行时区域的各个部分，其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生，随线程而灭；栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化，但在本章基于概念模型的讨论中，大体上可以认为是编译期可知的)，因此这几个区域的内存分配和回收都具备确定性，在这几个区]]></description><category></category></item><item><title><![CDATA[HashMap的理解]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79012298</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79012298</guid><author>Kitty_Landon</author><pubDate>Wed, 10 Jan 2018 17:30:08 +0800</pubDate><description><![CDATA[HashMap为什么是线程不安全的？
    一直以来只是知道HashMap是线程不安全的，但是到底HashMap为什么线程不安全，多线程并发的时候在什么情况下可能出现问题？
      HashMap底层是一个Entry数组，当发生hash冲突的时候，HashMap是采用链表的方式来解决的，在对应的数组位置存放链表的头结点。对链表而言，新加入的节点会从头结点加入。
        java]]></description><category></category></item><item><title><![CDATA[避免后台进程被杀死的几种方法]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010340</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010340</guid><author>Kitty_Landon</author><pubDate>Tue, 09 Jan 2018 10:54:03 +0800</pubDate><description><![CDATA[Android的几种进程
前台进程
    即与用户正在交互的Activity或者Activity用到的Service等，如果系统内存不足时前台进程是最后被杀死的。
可见进程
    可以是处于暂停状态(onPause)的Activity或者绑定在其上的Service，即被用户可见，但由于失去了焦点而不能与用户交互。
服务进程
    其中运行着使用startService方法启动的S]]></description><category></category></item><item><title><![CDATA[Android多线程--Android中常见的四种线程池]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010215</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010215</guid><author>Kitty_Landon</author><pubDate>Tue, 09 Jan 2018 10:50:34 +0800</pubDate><description><![CDATA[前言
    使用线程池可以给我们带来很多好处，首先通过线程池中线程的重用，减少创建和销毁线程的性能开销。其次，能控制线程池中的并发数，否则会因为大量的线程争夺CPU资源造成阻塞。最后，线程池能够对线程进行管理，比如使用ScheduledThreadPool来设置延迟N秒后执行任务，并且每隔M秒循环执行一次。
    下面通过介绍线程池中的真正实现者--ThreadPoolExecutor来引]]></description><category></category></item><item><title><![CDATA[实现线程同步的几种方式]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010007</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79010007</guid><author>Kitty_Landon</author><pubDate>Tue, 09 Jan 2018 10:41:08 +0800</pubDate><description><![CDATA[为什么要使用同步
    Java允许多线程并发控制，当多个线程同时操作一个可共享的资源变量时（如数据的增删改查），将会导致数据不准确，相互之间产生冲突，因此加入同步锁以避免在该线程没有完成操作之前，被其他线程调用，从而保证了该变量的唯一性和准确性。
    Java提供了一种内置的锁机制来支持原子性。每个Java对象都可以用作一个实现同步的锁，称为内置锁。线程进入同步代码块之前自动获取到锁，]]></description><category></category></item><item><title><![CDATA[Android广播管理一--Broadcast机制介绍]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79009889</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79009889</guid><author>Kitty_Landon</author><pubDate>Tue, 09 Jan 2018 10:25:50 +0800</pubDate><description><![CDATA[在Android系统中，广播（Broadcast）是在组件之间传播数据（Intent）的一种机制；这些组件甚至是可以位于不同的进程中，这样它就像Binder机制一样，起到进程间通信的作用。
    在Android系统中，为什么需要广播机制呢？广播机制，本质上它就是一种组件间的通信方式，如果是两个组件位于不同的进程当中，那么可以用Binder机制来实现，如果两个组件是在同一个进程中，那么它们之间]]></description><category></category></item><item><title><![CDATA[Android广播管理二--广播注册（registerReceiver）流程分析]]></title><link>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79009606</link><guid>https://blog.youkuaiyun.com/Kitty_Landon/article/details/79009606</guid><author>Kitty_Landon</author><pubDate>Tue, 09 Jan 2018 10:17:07 +0800</pubDate><description><![CDATA[前面分析了Android系统的广播机制，从本质来说，它是一种消息订阅/发布机制。因此，使用这种消息驱动模型的第一步便是订阅消息；而对Android应用程序来说，订阅消息其实就是注册广播接收器。
        接下来，我们继续分析Android应用程序是如何注册广播接收器的，以及把广播接收器注册到哪里去的。
        在Android的广播机制中，ActivityManagerServi]]></description><category></category></item></channel></rss>