<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Peterpan1223的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Peterpan1223</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Peterpan1223]]></copyright><item><title><![CDATA[Activity隐式启动]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/103542890</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/103542890</guid><author>Peterpan1223</author><pubDate>Sat, 14 Dec 2019 20:45:02 +0800</pubDate><description><![CDATA[action的匹配规则

action在Intent-filter中可以设置多条
intent中的action和intent-filter中的action必须完全一样时（包括大小写）才算匹配成功
intent中的action只要与intent-filter其中的一条匹配成功即可
intent中必须指定action否则匹配失败且intent中action最多只有一条

&lt;activity an...]]></description><category></category></item><item><title><![CDATA[Activity的启动模式]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/103540444</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/103540444</guid><author>Peterpan1223</author><pubDate>Sat, 14 Dec 2019 16:57:47 +0800</pubDate><description><![CDATA[standard

标准模式，这是系统的默认模式
每次启动一个Activity都会重新创建一个新的实例，不管这个实例是否存在
在这种模式下，谁启动了这个Activity那么这个Activity就运行在启动它的那个Activity所在的栈中

需要注意：当我们使用ApplicationContext去启动standard模式的Activity的时候会报错。因为standard模式的Activity默...]]></description><category></category></item><item><title><![CDATA[View事件分发机制]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102964093</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102964093</guid><author>Peterpan1223</author><pubDate>Thu, 07 Nov 2019 22:39:54 +0800</pubDate><description><![CDATA[View的Touch事件传递

dispatchTouchEvent

用来进行事件的分发。如果事件能够传递给当前View，那么此方法一定会被调用，返回结果受当前View的onTouchEvent和下级的dispatchTouchEvent方法的影响，表示是否消耗当前事件。

onInterceptTouchEvent

用来判断是否拦截某个事件，如果当前View拦截了某个事件，那么在同一个事件序...]]></description><category></category></item><item><title><![CDATA[Android App启动优化]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102937360</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102937360</guid><author>Peterpan1223</author><pubDate>Wed, 06 Nov 2019 17:18:18 +0800</pubDate><description><![CDATA[App启动方式

冷启动：指APP在手机启动后第一次运行，或者APP进程被kill掉后在再次启动。
温启动：App进程存在，当时Activity可能因为内存不足被回收。这时候启动App不需要重新创建进程，但是Activity的onCrate还是需要重新执行的。
热启动：App进程存在，并且Activity对象仍然存在内存中没有被回收。可以重复避免对象初始化，布局解析绘制。

查看启动时间
com....]]></description><category></category></item><item><title><![CDATA[Kotlin——02.类和对象]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102925868</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102925868</guid><author>Peterpan1223</author><pubDate>Tue, 05 Nov 2019 22:25:47 +0800</pubDate><description><![CDATA[类的定义
Kotlin 类可以包含：构造函数，初始化代码块、函数、属性、内部类、对象声明。
Kotlin 中使用关键字 class 声明类，后面紧跟类名：
class Person{  // 类名为 Person
    // 大括号内是类体构成
}

可以在类中定义成员函数：

class Person {

    fun eat() { //成员函数
        println("吃饭"...]]></description><category></category></item><item><title><![CDATA[自定义view——01.基础]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102898312</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102898312</guid><author>Peterpan1223</author><pubDate>Mon, 04 Nov 2019 16:22:09 +0800</pubDate><description><![CDATA[自定义view实现方式




类型
定义




自定义组合控件
多个控件组合成为一个新的控件，方便多处复用


继承系统View控件
继承自TextView等系统控件，在系统控件的基础功能上进行扩展


继承View
不复用系统控件逻辑，继承View进行功能定义


继承系统ViewGroup
继承自LinearLayout等系统控件，在系统控件的基础功能上进行扩展


继承ViewViewG...]]></description><category></category></item><item><title><![CDATA[懒加载Fragment]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102893133</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102893133</guid><author>Peterpan1223</author><pubDate>Mon, 04 Nov 2019 11:15:44 +0800</pubDate><description><![CDATA[为什么要使用懒加载
比如TabLayout+ViewPager这种模式，普通加载会请求所有页面的数据并绘制，这样对流量，性能都造成一定的浪费。使用懒加载可以优化加载网络数据的时机，做到在需要时加载，不需要时不加载。
实现思路
由于显示fragment的时候，存在viewpager的预加载机制，且左右相邻的fragment都会回调setUserVisibleHint这个方法，然后我们希望在进行加载数...]]></description><category></category></item><item><title><![CDATA[Bitmap]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102855969</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102855969</guid><author>Peterpan1223</author><pubDate>Mon, 04 Nov 2019 11:06:22 +0800</pubDate><description><![CDATA[1. Bitmap详解
Bitmap位图包括像素以及长、宽、颜色等描述信息。长宽和像素位数是用来描述图片的，可以通过这些信息计算出图片的像素占用内存的大小。
位图可以理解为一个画架，把图放到上面然后可以对图片做一系列的处理。
位图文件图像显示效果好，但是非压缩格式，需要占用较大的存储空间。
Config
表示图片像素类型

ARGB_8888
ARGB_4444
RGB_565
ALPHA_8

...]]></description><category></category></item><item><title><![CDATA[Sevice详解]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102867990</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102867990</guid><author>Peterpan1223</author><pubDate>Mon, 04 Nov 2019 08:16:33 +0800</pubDate><description><![CDATA[Service是什么

服务是Android中实现程序后台运行的解决方案，他非常适合是去执行那些不需要和用户交互而且还要长期运行的任务。服务的运行不依赖于任何用户界面，即使程序被切换到后台，或者用户打开了另一个应用程序，服务仍然能够保持独立运行。不过需要注意的是，服务并不是运行在一个独立的进程当中，而是依赖于创建服务时所在的应用程序进程。当某个应用程序被杀掉时，所有依赖该进程的服务也会停止运行。
...]]></description><category></category></item><item><title><![CDATA[android图片滤镜功能实现]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846218</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846218</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 22:56:38 +0800</pubDate><description><![CDATA[float mHue = 0.0f;
    float mSaturation = 1f;
    float mLum = 1f;
    float MID_VALUE;
    Bitmap oriBitmap,newBitmap;

    MID_VALUE = barHue.getMax() * 1.0F / 2;
    oriBitmap = BitmapFactory....]]></description><category></category></item><item><title><![CDATA[Retrofit——01.入门]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102861515</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102861515</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 22:55:06 +0800</pubDate><description><![CDATA[Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装，网络请求的工作本质上是 OkHttp 完成，而 Retrofit 仅负责 网络请求接口的封装
使用步骤

添加Retrofit库的依赖：

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit...]]></description><category></category></item><item><title><![CDATA[RxJava——3.变换操作符]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846969</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846969</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 07:37:37 +0800</pubDate><description><![CDATA[Map（）

作用
对被观察者发送的每1个事件都通过指定的函数处理，从而变换成另外一种事件
应用场景
数据类型转换

		 // 采用RxJava基于事件流的链式操作
        Observable.create(new ObservableOnSubscribe&lt;Integer&gt;() {

            // 1. 被观察者发送事件 = 参数为整型 = 1、2、3
 ...]]></description><category></category></item><item><title><![CDATA[RxJava——2.创建操作符]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846495</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102846495</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 07:37:16 +0800</pubDate><description><![CDATA[just（）

作用：


快速创建1个被观察者对象（Observable）
发送事件的特点：直接发送传入的事件


应用场景
快速创建 被观察者对象（Observable） &amp; 发送10个以下事件

Observable.just(1,2,3,4).subscribe(new Observer&lt;Integer&gt;() {
            @Override
      ...]]></description><category></category></item><item><title><![CDATA[RxJava——1.入门]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102827055</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102827055</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 07:37:02 +0800</pubDate><description><![CDATA[定义： RxJava是基于事件流，实现异步操作的库。


作用：类似AsyncTask，Handler


特点：基于事件流的链式调用，逻辑简介，实现优雅，使用简单


RxJava中的4个角色：


例如：开灯




角色
作用
类比




被观察者（Observable）
产生事件
开关


观察者（Observer）
接收事件，并给出响应动作
灯


订阅（Subscribe）
连接...]]></description><category></category></item><item><title><![CDATA[设计模式——02.Build设计模式]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102850447</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102850447</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 07:32:14 +0800</pubDate><description><![CDATA[简介
Build模式是一步一步创建复杂对象的模式。允许用户在不知道内部构造细节的情况下，可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和构造它的部件解耦，使得构建的过程和部件的表示隔离开，两者之间的耦合度降到最低。
定义
将一个复杂对象的构建和它的表示分离，使得同一个构建过程可以创建不同的表示。
使用场景

相同的方法，不同的执行顺序，产生不同的事件结果。
多个部件或零件，都可以...]]></description><category></category></item><item><title><![CDATA[设计模式——01.单例设计模式]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102850445</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102850445</guid><author>Peterpan1223</author><pubDate>Fri, 01 Nov 2019 07:31:20 +0800</pubDate><description><![CDATA[什么是单例设计模式？
单例模式是一种常用的软件设计模式，通过单例，保证系统中只有一个对象实例。

具体实现

将构造方法私有化，使其不能在外部通过new实例化该对象
在该类的内部产生一个唯一的实例化类对象，将其封装为private static 类型
定义静态方法返回对象

1.立即加载/饿汉式
public class Singleton {

    // 将自身实例化对象设置为一个属性，并用...]]></description><category></category></item><item><title><![CDATA[屏幕适配——02.smallestWidth 限定符适配]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828199</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828199</guid><author>Peterpan1223</author><pubDate>Wed, 30 Oct 2019 22:03:05 +0800</pubDate><description><![CDATA[原文地址
1.屏幕分辨率适配原理
屏幕分辨率限定符适配需要在 res 文件夹下创建各种屏幕分辨率对应的 values-xxx 文件夹，然后根据一个基准分辨率，例如基准分辨率为 1280x720，将宽度分成 720 份，取值为 1px~720px，将高度分成 1280 份，取值为 1px~1280px，生成各种分辨率对应的 dimens.xml 文件。
假设设计图上的一个控件的宽度为 720px，那...]]></description><category></category></item><item><title><![CDATA[屏幕适配——01.基本概念]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828175</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828175</guid><author>Peterpan1223</author><pubDate>Wed, 30 Oct 2019 22:01:27 +0800</pubDate><description><![CDATA[屏幕尺寸

屏幕尺寸指屏幕的对角线的长度，单位是英寸，1英寸=2.54厘米,比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

屏幕分辨率


屏幕分辨率是指在横纵向上的像素点数，单位是px，1px=1个像素点。一般以纵向像素横向像素，如1960* 1080。


dpi(屏幕像素密度)


屏幕像素密度是指每英寸上的像素点数，单位是dpi，即“dot per ...]]></description><category></category></item><item><title><![CDATA[CoordinatorLayout使用——layout_scrollFlags参数]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828133</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102828133</guid><author>Peterpan1223</author><pubDate>Wed, 30 Oct 2019 21:58:43 +0800</pubDate><description><![CDATA[layout_scrollFlags参数控制AppBarLayout中控件的行为

scroll：Child View 伴随着scrollingView的滚动事件而滚出或滚进屏幕

使用说明：

当ScrollView将要向下滚动的时候，优先滚动的是自己，当自己滚动到顶部头的时候，再开始触发滚动AppBarLayoout中的childView；
当ScrollView将要向上滚动的时候， 优先将A...]]></description><category></category></item><item><title><![CDATA[安卓存储——内部存储，外部存储]]></title><link>https://blog.youkuaiyun.com/Peterpan1223/article/details/102826799</link><guid>https://blog.youkuaiyun.com/Peterpan1223/article/details/102826799</guid><author>Peterpan1223</author><pubDate>Wed, 30 Oct 2019 21:39:38 +0800</pubDate><description><![CDATA[1. 内部存储
内部存储空间是和应用关联的，存储在内部存储中的文件只能被应用访问到。一个应用所创建的文件都在和应用包名相同的目录下，应用被卸载后这些文件也被删除。
获取存储的方法

获取内部存储的根路径：/data
Environment.getDataDirectory().getAbsolutePath()
某个应用在内部存储中的files路径： /data/data/com.test.soc...]]></description><category></category></item></channel></rss>