<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[开发简记]]></title><description><![CDATA[大部分文章都在：https://www.jiangkang.tech]]></description><link>https://blog.youkuaiyun.com/jking54</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jking54]]></copyright><item><title><![CDATA[Flutter-使用http请求数据并展示]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/97822438</link><guid>https://blog.youkuaiyun.com/jking54/article/details/97822438</guid><author>jking54</author><pubDate>Tue, 30 Jul 2019 21:51:01 +0800</pubDate><description><![CDATA[关注 https://github.com/jiangkang/flutter-system 了解更多Flutter相关的知识

不能进行网络请求的APP不是一个真的APP，Flutter目前在网络请求上还没有非常可靠的开源库（没有令人满意的），暂时用http来实现一下简单的网络请求吧。
效果图

数据模型
/// Model:图片列表响应
class ImageResponse {
  fin...]]></description><category></category></item><item><title><![CDATA[Flutter-实现图片圆角的几种方式]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/97822285</link><guid>https://blog.youkuaiyun.com/jking54/article/details/97822285</guid><author>jking54</author><pubDate>Tue, 30 Jul 2019 21:50:01 +0800</pubDate><description><![CDATA[关注 https://github.com/jiangkang/flutter-system 了解更多Flutter相关的知识

图片圆角在开发中还是非常常见的，用Flutter实现圆角还是非常简单的，目前了解的大概有下面这几种：

通过Card的shape属性
通过Container的decoration
直接使用ClipRRect

效果图

通过Card的shape属性
Card(
   ...]]></description><category></category></item><item><title><![CDATA[【Flutter】GridView使用之总结篇]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/95375069</link><guid>https://blog.youkuaiyun.com/jking54/article/details/95375069</guid><author>jking54</author><pubDate>Wed, 10 Jul 2019 21:29:44 +0800</pubDate><description><![CDATA[GridView的几种使用方式

GridView.count(@required int crossAxisCount)
GridView.extent(@required double maxCrossAxisExtent)
GridView(@required this.gridDelegate,List children)
GridView.builder(@required this.g...]]></description><category></category></item><item><title><![CDATA[【Flutter】GridView的使用之GridView.extent]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/94915915</link><guid>https://blog.youkuaiyun.com/jking54/article/details/94915915</guid><author>jking54</author><pubDate>Sat, 06 Jul 2019 23:55:22 +0800</pubDate><description><![CDATA[想了解更多关于Flutter的知识，可以关注：
https://github.com/jiangkang/flutter-system
https://jiangkang.tech

在上一篇文章 GridView.count 中讲过 GridView.count的用法，这里讲一下GridView.extent的用法。
GridView.count 是在交叉轴上创建固定个数的Item，cross...]]></description><category></category></item><item><title><![CDATA[【Flutter】GridView的使用之GridView.count]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/94907275</link><guid>https://blog.youkuaiyun.com/jking54/article/details/94907275</guid><author>jking54</author><pubDate>Sat, 06 Jul 2019 22:50:56 +0800</pubDate><description><![CDATA[GridView属于一种比较常见的布局，这里有必要说一下他的常见用法。
简单使用

class GridViewDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(10),
 ...]]></description><category></category></item><item><title><![CDATA[【Flutter】Text的使用]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/94883786</link><guid>https://blog.youkuaiyun.com/jking54/article/details/94883786</guid><author>jking54</author><pubDate>Sat, 06 Jul 2019 20:19:55 +0800</pubDate><description><![CDATA[想了解更多关于Flutter的知识，可以关注：
https://github.com/jiangkang/flutter-system
https://jiangkang.tech

文本作为UI最基本的元素，最基本的用法有这些：

字体
文字大小、颜色
一些常用样式，比如倾斜，加粗，下划线，删除线等
文字超出边界之后如何显示
文字的单行，多行控制
富文本的显示
文字渐变，阴影
文本点击事件

...]]></description><category></category></item><item><title><![CDATA[【线程基础】多个线程，顺序输出]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/93238876</link><guid>https://blog.youkuaiyun.com/jking54/article/details/93238876</guid><author>jking54</author><pubDate>Fri, 21 Jun 2019 22:15:33 +0800</pubDate><description><![CDATA[【线程基础】多个线程，顺序输出问题描述解题思路代码
问题描述
有三个线程：

一个线程只可以输出：0,3,6,9…
一个线程只可以输出：1,4,7,10…
一个线程只可以输出：2,5,8,11…

现在要求调度三个线程，使这些数字按照顺序依次输出，如0，1，2，3，4…
解题思路

找规律：很明显是等差数列 (n % 3)
线程调度的方法：锁 + notifyAll

代码
class Compu...]]></description><category></category></item><item><title><![CDATA[Gradle 库依赖关系的管理]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/80834358</link><guid>https://blog.youkuaiyun.com/jking54/article/details/80834358</guid><author>jking54</author><pubDate>Sun, 01 Jul 2018 13:38:06 +0800</pubDate><description><![CDATA[查看库依赖关系





列出指定module的依赖关系

./gradlew -q moduleName:dependencies &amp;amp;amp;gt; outfile.txt



列出多个指定module的依赖关系



./gradlew -q dependencies moduleName1:dependencies moduleName2:dependencies &amp;amp;amp;gt; outfile.txt...]]></description><category></category></item><item><title><![CDATA[Android里的SparseArray]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79750863</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79750863</guid><author>jking54</author><pubDate>Thu, 29 Mar 2018 23:08:43 +0800</pubDate><description><![CDATA[除了我们常用JDK提供的容器以外，Android还提供的自己的容器类，如SparseArray就是其中比较常见的一个类。

特点


SparseArray是一个整形到对象的映射；
在整形到对象的映射这方面，它比HashMap在内存上更有效率；

因为它避免了自动装箱的key，它的数据结构不依赖一个额外的Entry对象
它把映射关系存储在两个数组中，用二分查找算法查找元素；

这种实现不宜用在含有...]]></description><category></category></item><item><title><![CDATA[Application启动流程]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79720420</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79720420</guid><author>jking54</author><pubDate>Tue, 27 Mar 2018 22:20:58 +0800</pubDate><description><![CDATA[先对整体有了一个基本的认识之后，再去看细节


谈到Android Application的启动流程，很多文章都是各种源码类和方法的一堆调用关系，这样的文章就算看一百遍，也只是云里雾里。源码得看，但是最好不要一下子深陷到源码的细节之中，不可自拔。这里站在前人的基础之上做一个总结。

在说应用的启动流程之前，得先了解一下Android系统的启动流程，因为Application的启动是离不开系统...]]></description><category></category></item><item><title><![CDATA[聊一聊BlockingQueue]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79711535</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79711535</guid><author>jking54</author><pubDate>Tue, 27 Mar 2018 13:20:12 +0800</pubDate><description><![CDATA[BlockingQueue，也叫阻塞队列，本身是一个继承自Queue的接口，并在Queue的基础上支持了两个附加操作：


获取元素时，等待队列为非空
存储元素时，等待空间变得可用


这些方法有4中形式：


抛异常 ，如 add/remove/element;
返回特殊值(null或者false),如offer/poll/peek;
阻塞，如put/take；
超时，如带超时时间参数的offe...]]></description><category></category></item><item><title><![CDATA[聊一聊Vector与Stack]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79711144</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79711144</guid><author>jking54</author><pubDate>Tue, 27 Mar 2018 12:26:44 +0800</pubDate><description><![CDATA[Java Collection系列下面有List，Set，Queue等，而Vector属于List下面的一个实现。

特点


Vector本质上是一个可变数组
在Vector创建之后，其size可以增加和减少
线程安全的
在非多线程的情况下建议使用ArrayList


简要分析

先看一下有哪些重要的属性：



protected Object[] elementData;
protecte...]]></description><category></category></item><item><title><![CDATA[设计一个FrameLayout（Kotlin）]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79690912</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79690912</guid><author>jking54</author><pubDate>Sun, 25 Mar 2018 21:29:56 +0800</pubDate><description><![CDATA[
  拆零件，然后再把零件拼装回去，来来回回对其结构也就熟悉了




FrameLayout的特点


子View按照添加顺序层叠显示
FrameLayout的尺寸与其最大子View（可见的）的尺寸相等（加上padding值）
如果要让GONE的子View参与计算，则需要把setMeasureAllChildren(boolean) ，setConsiderGoneChildrenWhenMea...]]></description><category></category></item><item><title><![CDATA[Android SQLite 简单的使用步骤]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79662523</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79662523</guid><author>jking54</author><pubDate>Sun, 25 Mar 2018 20:26:12 +0800</pubDate><description><![CDATA[Android开发过程中可以用SQLite储存结构化数据，如联系人信息之类的。

由于SQLite的操作API是相当底层的，因此开发者需要花费很多时间去手动处理SQL查询语句，一旦数据结构改变就得相应的更新SQL语句，这个过程非常耗时，也容易出现错误。 
同时，开发者不得不写很多样板代码来转换SQL语句与数据对象。

现在Google比较推荐的做法就是用Room作为一个访问你数据中信息的抽象层，当...]]></description><category></category></item><item><title><![CDATA[WebView HTTPS页面引用HTTP资源的问题]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79627773</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79627773</guid><author>jking54</author><pubDate>Tue, 20 Mar 2018 16:35:08 +0800</pubDate><description><![CDATA[问题



WebView页面图片无法显示； 
log报错：



chromium: [INFO:CONSOLE(0)] &quot;Mixed Content: The page at xxx was loaded over HTTP



原因



如果不单独设置，WebView是不支持在Https域名下加载Http资源的。

设置办法：

 //允许混合模式（http与https）
 if (Bu...]]></description><category></category></item><item><title><![CDATA[Handler使用场景以及源码分析]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79068631</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79068631</guid><author>jking54</author><pubDate>Mon, 15 Jan 2018 20:51:15 +0800</pubDate><description><![CDATA[路漫漫其修远兮，吾将上下而求索




Handler的使用场景




子线程操作完成之后，通知主线程执行操作

首先在主线程创建一个Handler实例

private val MSG_WHAT: Int = 1000

private var mHandler = object : Handler() {
    override fun handleMessage(msg: Message]]></description><category></category></item><item><title><![CDATA[自定义View-画一个会动的太极图]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79047049</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79047049</guid><author>jking54</author><pubDate>Fri, 12 Jan 2018 18:20:59 +0800</pubDate><description><![CDATA[效果







步骤分解



像太极图这种比较规则的图形，一般就是用数学知识进行图形分解，分成一个个基本图形，比如线段，圆，矩形，扇形，多边形等，然后一步步绘制出来即可。 
- 分解太极图



@Override
    protected void onDraw(Canvas canvas) {

        int width = getWidth();
        int h]]></description><category></category></item><item><title><![CDATA[多线程下载，断点续传技术要点---Http Header]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/79005688</link><guid>https://blog.youkuaiyun.com/jking54/article/details/79005688</guid><author>jking54</author><pubDate>Mon, 08 Jan 2018 17:59:45 +0800</pubDate><description><![CDATA[涉及到的Header


Accept-Ranges
Range
If-Range
Content-Range


Accept-Ranges:



表示自身支持范围请求（partial requests），字段的具体值用于定义范围请求的单位。当客户端发现Accept-Ranges时，可以尝试继续中断了的下载，而不是重新下载。

语法：

Accept-Ranges: bytes
Accept-]]></description><category></category></item><item><title><![CDATA[算法：字符串处理-判断两个字符串是否互为“形变词”（判断两字符串中字符种类和出现次数是否均相同）]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/78961342</link><guid>https://blog.youkuaiyun.com/jking54/article/details/78961342</guid><author>jking54</author><pubDate>Wed, 03 Jan 2018 16:30:16 +0800</pubDate><description><![CDATA[对于两个字符串A和B，如果A和B中出现的字符种类相同，且每种字符出现的次数相同，则A和B互为形变词
问题输入字符串A与B，检查两个字符串是否互为形变词算法1思路：利用固定大小数组存字符出现的次数，字符的ASCII值作为数组下标，遍历A，存入数据，遍历B，如果值为0，则表示A中无此字符或者B中该字符次数大于A中该字符出现的次数，否则次数减一。    public static boolean chec]]></description><category></category></item><item><title><![CDATA[巧用Gradle Wrapper 解决实际问题]]></title><link>https://blog.youkuaiyun.com/jking54/article/details/78929788</link><guid>https://blog.youkuaiyun.com/jking54/article/details/78929788</guid><author>jking54</author><pubDate>Fri, 29 Dec 2017 11:33:43 +0800</pubDate><description><![CDATA[关于gradle，会遇见哪些问题？
国内gradle下载太慢，项目初始化时间长
jenkins中关于gradle的环境配置麻烦
新手配置gradle麻烦
gradle wrapper我们执行build任务的时候，可以用两种方式gradle build和./gradlew buildgradle build 需要配置gradle环境变量， 
 
而./gradlew build 则是利用项目下的gra]]></description><category></category></item></channel></rss>