<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yigit_dev的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/michael_yt</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; michael_yt]]></copyright><item><title><![CDATA[工厂方法模式和抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/82112443</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/82112443</guid><author>michael_yt</author><pubDate>Mon, 10 Sep 2018 16:16:02 +0800</pubDate><description><![CDATA[工厂方法模式 
定义一个用于创建对象的接口，让子类决定实例化哪一个类。 在工厂里面可以对对象的创建做严格的定义，client端直接通过工厂创建出来就可以使用了。

public abstract class Product {  //产品抽象类
    public abstract void method(); 
}
public class ConcreteProductA extends P...]]></description><category></category></item><item><title><![CDATA[代理模式、装饰模式和适配器模式]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78574259</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78574259</guid><author>michael_yt</author><pubDate>Mon, 10 Sep 2018 16:13:40 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/iloveai/p/word2vec.html]]></description><category></category></item><item><title><![CDATA[设计模式之单例和模板]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/81568055</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/81568055</guid><author>michael_yt</author><pubDate>Wed, 22 Aug 2018 10:30:44 +0800</pubDate><description><![CDATA[单例模式



核心思想就是，构造函数私有化，通过静态方法获取唯一实例并保证线程安全，防止反序列化重新生成实例。

饿汉式



public class Singleton {
    private static final Singleton mSingleton = new Singleton();
    private Singleton(){}
    public static S...]]></description><category></category></item><item><title><![CDATA[白话面向对象的六大原则]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/80801641</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/80801641</guid><author>michael_yt</author><pubDate>Thu, 28 Jun 2018 10:52:25 +0800</pubDate><description><![CDATA[单一职责原则(Single Responsibility Principle) : 一个类中应该是一组相关性很高的函数,数据的封装.即不能把两个完全不同的功能放在一个类中,但是这个类或者函数职责的划分就因人而异了. 
开闭原则(Open Close Principle) : 软件中的对象(类,模块,函数等)应该对于扩展开放,对于修改封闭.即提倡我们应该通过 继承 或者 实现接口的方式去扩展原有类的...]]></description><category></category></item><item><title><![CDATA[Android ActivityManagerService 启动流程总结]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/79322483</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/79322483</guid><author>michael_yt</author><pubDate>Wed, 14 Feb 2018 10:41:00 +0800</pubDate><description><![CDATA[ActivityManagerService(AMS)是Android中核心的服务之一，主要负责系统中四大组件的启动、切换、调度及应用程序的管理和调度等工作。

AMS启动整体流程图

 
从上图可以看出，经过的类不是很多，但是每个方法中的细分支很多，这我就不贴代码了，详细的逻辑请见源码，这个只是做个大概的总结，流程中的部分分支和作用请见图中的文字说明

下面再说说两个关于内存管理的方法：



...]]></description><category></category></item><item><title><![CDATA[SystemServer到Launcher]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78647802</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78647802</guid><author>michael_yt</author><pubDate>Thu, 14 Dec 2017 10:57:44 +0800</pubDate><description><![CDATA[通过前面对android 启动流程到SystemServer的分析，紧接着我们来到了本篇博客，介绍重 systemserver 到 launcher 的启动过程。整体过程 
从 SystemServer 到 Launcher 的过程其实就是从系统进程到应用进程的过程，他们之间通过binder通信来传递信息，并相互作用一起决定桌面应用（launcher）的启动。整体流程图 
上图详细介绍了从 syst]]></description><category></category></item><item><title><![CDATA[android 启动流程到SystemServer]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78603600</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78603600</guid><author>michael_yt</author><pubDate>Sat, 25 Nov 2017 12:23:59 +0800</pubDate><description><![CDATA[本篇博客基于 android7.1 主要介绍android启动流程中，从init开始到启动SystemServer结束为止，整个流程中各个方法里面主要做了哪些初始化操作，以便于对整个系统的启动有一定的了解。整体介绍图 
注 图片来源于http://blog.youkuaiyun.com/dd864140130/article/details/57624948整体流程图流程中各部分的实现细节基于Linux内核的a]]></description><category></category></item><item><title><![CDATA[CNN卷积神经网络学习笔记]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78486577</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78486577</guid><author>michael_yt</author><pubDate>Thu, 09 Nov 2017 13:11:44 +0800</pubDate><description><![CDATA[本篇博客主要归纳整理，CNN相关的基础知识和部分经典卷积神经网络的结构与特点。图片大部分来自Fei-Fei Li CNN课程PPT、网络和paper，如有侵犯请及时告知CNN相关基础知识卷积神经网络和全连接神经网络的区别区别：如上图所示， 
 1. 全连接神经网络中每个神经元或者filter都与输入图像的每个像素相关联，参数量大 
 2. 卷积神经网络中每个神经元或者filter只与原图中部分像素相]]></description><category></category></item><item><title><![CDATA[联系人合并流程]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78345560</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78345560</guid><author>michael_yt</author><pubDate>Wed, 25 Oct 2017 19:41:35 +0800</pubDate><description><![CDATA[本博客基于android7.1版本分析，仅用于沟通学习使用



整体流程总结


通过在ContactEditorBaseFragment中对option item link的点击跳转到ContactSelectionActivity界面
通过LoaderManager去查询contactsprovider中的数据，并分成两部分显示数据
上半部分显示系统建议合并的联系人最多显示4个，根据联系人的]]></description><category></category></item><item><title><![CDATA[android导入vCard联系人流程]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78299536</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78299536</guid><author>michael_yt</author><pubDate>Fri, 20 Oct 2017 21:09:55 +0800</pubDate><description><![CDATA[本博客基于android7.1版本分析，仅用于沟通学习使用上一篇博客介绍了 android导出vCard联系人流程 紧接着我们在这篇博客来看看它是如何导入一个vCard联系人的。整体流程总结
通过在contacts联系人中界面跳转，我们跳转到了 DocumentsActivity 界面并选择我们需要导入的以 .vcf 结尾的vCard文件，将Uri以intent的方式返回给ImportVCardAc]]></description><category></category></item><item><title><![CDATA[android导出vCard联系人流程]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78270537</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78270537</guid><author>michael_yt</author><pubDate>Wed, 18 Oct 2017 10:59:43 +0800</pubDate><description><![CDATA[本博客基于android7.1版本分析，仅用于沟通学习使用背景介绍什么是vCard联系人vCard的定义我们可以参考维基百科的介绍，大概的意思是说它是一种以 .vcf 结尾的结构化文件，里面保存了诸如姓名、电话、地址、邮箱等个人信息，便于在网上或者设备之间进行数据交换，vCard联系人就是以这种格式存储的联系人信息。vCard有哪些版本通过查看源码 frameworks/opt/vcard 目录下面]]></description><category></category></item><item><title><![CDATA[android 设置默认launcher]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/78112262</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/78112262</guid><author>michael_yt</author><pubDate>Wed, 27 Sep 2017 14:13:55 +0800</pubDate><description><![CDATA[本博客基于 Android 7.0，只作为沟通学习使用。



前言

平时使用android手机的时候我们可能会遇到下面的情况，比如：我们有多个浏览器，当我们没有设置哪一个为默认的浏览器并点击了一行网址时，就会弹出一个系统选择框，让用户选择一个浏览来打开这个网址，并且会让用户选择只使用一次还是将你选择的浏览器设为默认的浏览。那么问题就来了，如果我不想出现这个提示框，我就想第一次开机时，就自动帮我]]></description><category></category></item><item><title><![CDATA[contacts 账户同步]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/77993160</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/77993160</guid><author>michael_yt</author><pubDate>Fri, 15 Sep 2017 17:25:46 +0800</pubDate><description><![CDATA[本流程图基于MTK平台 Android 7.0，本流程只作为沟通学习使用

工作中遇到一个问题，手机登陆Google账户并同步账户里面的contacts后，本地保存的联系人数据被无缘无故的删除了，甚是奇怪，通过对比前后的数据库我们发现，同步后直接把我们的本地账户给删除了，所以导致属于这个账户的所有联系人都不见了，那么无缘无故为什么会删除本地账户呢？我们先抛出问题，等我们看完整个流程再回来看看真是什]]></description><category></category></item><item><title><![CDATA[Tensorflow 模型持久化]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/74737489</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/74737489</guid><author>michael_yt</author><pubDate>Mon, 10 Jul 2017 09:47:24 +0800</pubDate><description><![CDATA[当我们使用 tensorflow 训练神经网络的时候，模型持久化对于我们的训练有很重要的作用。


如果我们的神经网络比较复杂，训练数据比较多，那么我们的模型训练就会耗时很长，如果在训练过程中出现某些不可预计的错误，导致我们的训练意外终止，那么我们将会前功尽弃。为了避免这个问题，我们就可以通过模型持久化（保存为CKPT格式）来暂存我们训练过程中的临时数据。
如果我们训练的模型需要提供给用户做离线的]]></description><category></category></item><item><title><![CDATA[MMI工厂模式启动流程]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/73543204</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/73543204</guid><author>michael_yt</author><pubDate>Wed, 21 Jun 2017 13:33:01 +0800</pubDate><description><![CDATA[基于android N MTK 平台 
本文主要记录从 dialer 的 dialpad 输入特殊的字符串启动工厂模式的流程。整体流程图部分方法介绍DialpadFragment.afterTextChanged因为 DialpadFragment 实现了 TextWatcher 接口，并实现了 afterTextChanged 方法，当dialpad里面edittext 控件中内容改变时会回调这个]]></description><category></category></item><item><title><![CDATA[Android Notification动态显示通话时间]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/73351307</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/73351307</guid><author>michael_yt</author><pubDate>Fri, 16 Jun 2017 22:34:06 +0800</pubDate><description><![CDATA[基于android N MTK释放的源码 
本文主要讲解如何在 IncallUI 的notification 上面不停地更新显示当前已通话多长时间，从而达到和incallUI通话界面上的通话时间一致。主要思路
我们需要知道通话建立时的时间，即call 的状态从 INCOMING或者DIALING 转变成ACTIVE的时候
时间每秒钟都会发生变化，所以我们就需要不停的更新notification的界面]]></description><category></category></item><item><title><![CDATA[Tensorflow MNIST for Android]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/72955793</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/72955793</guid><author>michael_yt</author><pubDate>Sat, 10 Jun 2017 18:13:23 +0800</pubDate><description><![CDATA[本篇博客主要介绍如何使用 tensorflow 通过 CNN 实现 MNIST 手写数字识别问题，并将模型持久化在Android端运行。整体介绍主要需要通过以下几步：
模型生成过程：使用 tensorflow  通过 CNN 的方式实现 MNIST 手写数字识别，并将最后训练好的模型持久化（这里模型以 
.pb 后缀名的方式保存，因为目前只在Android端使用模型，只会用到前向传播过程，不对模型再]]></description><category></category></item><item><title><![CDATA[Android N Phone类图关系]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/70624915</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/70624915</guid><author>michael_yt</author><pubDate>Mon, 24 Apr 2017 18:00:50 +0800</pubDate><description><![CDATA[上面一篇博客介绍了 Phone 进程的启动流程，这篇博客具体介绍一下 Phone 进程启动过程中相关类的作用。Phone对象关系图图片来自： http://blog.youkuaiyun.com/linyongan/article/details/51994817 
Phone对象创建流程Phone进程相关类说明右键图片选择在新页面打开查看大图]]></description><category></category></item><item><title><![CDATA[Android N Phone进程启动流程]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/70598637</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/70598637</guid><author>michael_yt</author><pubDate>Mon, 24 Apr 2017 17:20:32 +0800</pubDate><description><![CDATA[本流程图基于MTK平台 Android 7.0，本流程只作为沟通学习使用整体流程图部分关键点说明persistent属性以下来自官网介绍：https://developer.android.com/guide/topics/manifest/application-element.htmlandroid:persistent
Whether or not the application should]]></description><category></category></item><item><title><![CDATA[实现UTF-8、UCS2编码和解码]]></title><link>https://blog.youkuaiyun.com/michael_yt/article/details/70257559</link><guid>https://blog.youkuaiyun.com/michael_yt/article/details/70257559</guid><author>michael_yt</author><pubDate>Thu, 20 Apr 2017 14:01:25 +0800</pubDate><description><![CDATA[编码的原理知识可以看：https://www.zhihu.com/question/23374078    public void encodeDecode(){
        String str = "测试字符转换";
        try {
            //使用 URLEncoder、URLDecoder方法实现
            String strGBK = URL]]></description><category></category></item></channel></rss>