<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[madoka_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/madoka_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; madoka_]]></copyright><item><title><![CDATA[如何正确的在低版本SDK调用高版本API？]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/103031683</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/103031683</guid><author>madoka_</author><pubDate>Tue, 12 Nov 2019 16:11:34 +0800</pubDate><description><![CDATA[当我们的minSdkVersion的版本低于新API所在的版本时，我们直接使用新API在编译时会出现报错。
minSdkVersion是在build.gradle中指定的。


Call requires API level 24 (current min is 19)

编译器还是很强大的，提供了四种解决方案：
但是第一、第二、第三种方法只是能编译通过，到了低于API24的系统（也就是低于And...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-Handler、Thread、HandlerThread三者的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/103031338</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/103031338</guid><author>madoka_</author><pubDate>Tue, 12 Nov 2019 15:56:43 +0800</pubDate><description><![CDATA[一、前期知识储备

（1）Handler类，上官方文档，Handler

public class Handler.A Handler allows you to send and process Messageand Runnable objects associated with a thread's MessageQueue. Each Handler instanceis associ...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-NetWork——描述一次完整的网络请求过程]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/103029541</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/103029541</guid><author>madoka_</author><pubDate>Tue, 12 Nov 2019 15:15:43 +0800</pubDate><description><![CDATA[0.前言

从我们在浏览器的地址栏输入http://blog.youkuaiyun.com/seu_calvin后回车，到我们看到该博客的主页，这中间经历了什么呢？简单地回答这个问题，大概是经历了域名解析、TCP的三次握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码，同时请求html代码中的资源（如js、css、图片等）、最后浏览器对页面进行渲染并呈现给用户。下面分别...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-Activity、Window、View的关系]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102939430</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102939430</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 17:32:11 +0800</pubDate><description><![CDATA[Activity像一个工匠（控制单元），Window像窗户（承载模型），View像窗花（显示视图）

LayoutInflater像剪刀，Xml配置像窗花图纸。

按照MVC的概念，Activity相当于Controller的角色，Window和View相当于View的角色。


1)一个Activity构造的时候会初始化一个Window，准确的说是PhoneWindow。
2)这个PhoneWi...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-IntentService]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102938952</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102938952</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 17:14:54 +0800</pubDate><description><![CDATA[IntentService是Service类的子类，用来处理异步请求。客户端通过startService(Intent)方法传递请求给IntentService，

IntentService通过worker thread处理每个Intent对象，执行完所有工作后自动停止Service。

写构造方法 复写onHandleIntent()方法

IntentService执行如下操作

...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理- 本地广播和全局广播有什么差别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102938171</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102938171</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 16:44:07 +0800</pubDate><description><![CDATA[本地广播和全局广播的差别

BroadcastReceiver是针对应用间、应用与系统间、应用内部进行通信的一种方式
LocalBroadcastReceiver仅在自己的应用内发送接收广播，也就是只有自己的应用能收到，数据更加安全广播只在这个程序里，而且效率更高。

BroadcastReceiver 使用

制作intent（可以携带参数）
使用sendBroadcast()传入intent;...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-如何导入外部数据库]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102938019</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102938019</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 16:41:38 +0800</pubDate><description><![CDATA[数据库本质就是文件

android系统下数据库应该存放在 /data/data/com..(package name)/ 目录下

所以导入数据库其实就是文件的复制操作

用到的就是文件流FileInputStream，熟悉java的话可以轻松的完成文件的复制



if(!(newFile(dbfile).exists())) {

  InputStream is =this.context...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-ArrayMap和HashMap的实现原理]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102937905</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102937905</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 16:34:29 +0800</pubDate><description><![CDATA[一：HashMap

HashMap内部是使用一个默认容量为16的数组来存储数据的，而数组中每一个元素却又是一个链表的头结点，所以，更准确的来说，HashMap内部存储结构是使用哈希表的拉链结构（数组+链表），这种存储数据的方法叫做拉链法。如图：





且每一个结点都是Entry类型，那么Entry是什么呢？我们来看看HashMap中Entry的属性：








	final ...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-HashMap和ArrayMap各自的优势]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102937872</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102937872</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 16:33:29 +0800</pubDate><description><![CDATA[1.查找效率

HashMap因为其根据hashcode的值直接算出index，所以其查找效率是随着数组长度增大而增加的。

ArrayMap使用的是二分法查找，所以当数组长度每增加一倍时，就需要多进行一次判断，效率下降。

所以对于Map数量比较大的情况下，推荐使用



2.扩容数量



HashMap初始值16个长度，每次扩容的时候，直接申请双倍的数组空间。

ArrayMap每次扩容...]]></description><category></category></item><item><title><![CDATA[安卓姿势点梳理-Java 容器类之间的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102931419</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102931419</guid><author>madoka_</author><pubDate>Wed, 06 Nov 2019 11:27:48 +0800</pubDate><description><![CDATA[1.Array

Array：效率高，容量固定无法动态改变。并且length只能告诉容量，而不能告诉长度。

2.Collection、List、Set和Map





Collection、List、Set和Map都是接口。

Collection是List和Set两个接口的基接口（父接口）

List在Collection之上增加了"有序"

Set在Collection之上增加了"唯...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-抽象类与接口的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102919122</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102919122</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 16:46:14 +0800</pubDate><description><![CDATA[1.抽象类要被子类继承，接口要被类实现。

2.接口只能做方法声明，抽象类中可以作方法声明，也可以做方法实现。

3.接口里定义的变量只能是公共的静态的常量，抽象类中的变量是普通变量。

4.接口是设计的结果，抽象类是重构的结果。

5.抽象类和接口都是用来抽象具体对象的，但是接口的抽象级别最高。

6.抽象类可以有具体的方法和属性，接口只能有抽象方法和不可变常量。

7.抽象类主要用来抽象类别，...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-什么是线程阻塞，什么导致线程阻塞]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102918175</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102918175</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 16:16:38 +0800</pubDate><description><![CDATA[阻塞状态的线程的特点是：该线程放弃CPU的使用，暂停运行，只有等到导致阻塞的原因消除之后才恢复运行。或者是被其他的线程中断，该线程也会退出阻塞状态，同时抛出InterruptedException

1）线程执行了Thread.sleep(intmillsecond);方法，当前线程放弃CPU，睡眠一段时间，然后再恢复执行

2）线程执行一段同步代码，但是尚且无法获得相关的同步锁，只能进入阻塞状态...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-JAVA的多态性]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102918137</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102918137</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 16:09:05 +0800</pubDate><description><![CDATA[多态性

java引用类型有两个：

　　编译时类型

　　编译时类型由声明该变量时使用的类型决定

　　运行时类型

　　运行时类型由实际赋给该变量的对象决定

例：




 1 class Animal{
 2     public int month = 2;
 3     public void eat(){
 4         System.out.println("动物吃东西");...]]></description><category></category></item><item><title><![CDATA[String,StringBuffer与StringBuilder的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102917864</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102917864</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 15:59:34 +0800</pubDate><description><![CDATA[一、Java String 类——String字符串常量

字符串广泛应用在Java 编程中，在 Java 中字符串属于对象，Java 提供了String 类来创建和操作字符串。

需要注意的是，String的值是不可变的，这就导致每次对String的操作都会生成新的String对象，这样不仅效率低下，而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图：



我们可...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-Java-int和Integer的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102917469</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102917469</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 15:52:34 +0800</pubDate><description><![CDATA[在说int和Integer的区别之前，先要弄清楚两个问题：
一、java基本数据类型及其封装类
二、java自动拆箱和自动装箱

一、java基本数据类型及其封装类

数据类型 字节大小 封装类
byte 8位 Byte
short 16位 Short
int 32位 Interger
long 64位 Long
float 32位...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-java中int char long各占多少字节数]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102917207</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102917207</guid><author>madoka_</author><pubDate>Tue, 05 Nov 2019 15:41:21 +0800</pubDate><description><![CDATA[2.一个字节等于8位 1byte = 8bit

char占用的是2个字节 16位，所以一个char类型的可以存储一个汉字。

整型：

byte:1个字节 8位 -128~127

short ：2个字节 16位

int ：4个字节 32位

long：8个字节 64位

浮点型：

float：4个字节 32 位

double ：8个字节 64位

注：默认的是double类型，如3.1...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-HashMap和HashSet的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102900621</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102900621</guid><author>madoka_</author><pubDate>Mon, 04 Nov 2019 17:22:33 +0800</pubDate><description><![CDATA[HashMap和HashSet都是collection框架的一部分，它们让我们能够使用对象的集合。collection框架有自己的接口和实现，主要分为Set接口，List接口和Queue接口。它们有各自的特点，Set的集合里不允许对象有重复的值，List允许有重复，它对集合中的对象进行索引，Queue的工作原理是FCFS算法(First Come, First Serve)。

什么是HashSe...]]></description><category></category></item><item><title><![CDATA[Androdi姿势点梳理-HashMap和Hashtable的区别]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102900377</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102900377</guid><author>madoka_</author><pubDate>Mon, 04 Nov 2019 17:06:41 +0800</pubDate><description><![CDATA[HashMap和Hashtable都实现了Map接口，但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有：线程安全性，同步(synchronization)，以及速度。

HashMap几乎可以等价于Hashtable，除了HashMap是非synchronized的，并可以接受null(HashMap可以接受为null的键值(key)和值(value)，而Hashtable则不行)。
	H...]]></description><category></category></item><item><title><![CDATA[安卓姿势点梳理-HashMap底层实现原理与碰撞问题]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102897556</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102897556</guid><author>madoka_</author><pubDate>Mon, 04 Nov 2019 17:03:21 +0800</pubDate><description><![CDATA[HashMap的工作原理

HashMap基于hashing原理，我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时，它调用键对象的hashCode()方法来计算hashcode，让后找到bucket位置来储存值对象。当获取对象时，通过键对象的equals()方法找到正确的键值对，然后返回值对象。HashMap使用链表来解决碰撞问题①，当发生碰撞了，对象将会储存...]]></description><category></category></item><item><title><![CDATA[Android姿势点梳理-Java垃圾回收（GC）机制详解]]></title><link>https://blog.youkuaiyun.com/madoka_/article/details/102833643</link><guid>https://blog.youkuaiyun.com/madoka_/article/details/102833643</guid><author>madoka_</author><pubDate>Fri, 01 Nov 2019 11:48:42 +0800</pubDate><description><![CDATA[一、为什么需要垃圾回收

　　如果不进行垃圾回收，内存迟早都会被消耗空，因为我们在不断的分配内存空间而不进行回收。除非内存无限大，我们可以任性的分配而不回收，但是事实并非如此。所以，垃圾回收是必须的。

二、哪些内存需要回收？

哪些内存需要回收是垃圾回收机制第一个要考虑的问题，所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象？

1、引用计数法（JAVA没有采用...]]></description><category></category></item></channel></rss>