-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
919 lines (595 loc) · 49.8 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Fleming's blog</title>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<meta name="author" content="Fleming Chen">
<meta property="og:type" content="website">
<meta property="og:title" content="Fleming's blog">
<meta property="og:url" content="https://flemingme.github.io/index.html">
<meta property="og:site_name" content="Fleming's blog">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Fleming's blog">
<meta name="twitter:creator" content="@fleming_chen">
<link rel="alternative" href="/atom.xml" title="Fleming's blog" type="application/atom+xml">
<link rel="icon" href="/img/favicon.ico">
<link rel="apple-touch-icon" href="/img/jacman.jpg">
<link rel="apple-touch-icon-precomposed" href="/img/jacman.jpg">
<link rel="stylesheet" href="/css/style.css">
</head></html>
<body>
<header>
<div>
<div id="imglogo">
<a href="/"><img src="/img/logo.png" alt="Fleming's blog" title="Fleming's blog"></a>
</div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="Fleming's blog">Fleming's blog</a></h1>
<h2 class="blog-motto"></h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">文章</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索">
<input type="hidden" name="q" value="site:flemingme.github.io">
</form>
</li>
</ul>
</ul></nav>
</div>
</header>
<div id="container">
<div id="main">
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/08/16/你会使用AsyncTask吗?/" title="你会使用AsyncTask吗?" itemprop="url">你会使用AsyncTask吗?</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-08-16T02:32:32.000Z" itemprop="datePublished"> 发表于 2017-08-16</time>
</p>
</header>
<div class="article-content">
<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>AsyncTask的本身其实是对Handler机制的封装,目的是让异步操作的实现变得简单,更多的关注业务实现。</p>
<h2 id="基本步骤"><a href="#基本步骤" class="headerlink" title="基本步骤"></a>基本步骤</h2><ul>
<li>创建一个继承自AsyncTask的类。</li>
<li>确定<code>AsyncTask<Params(参数), Progress(进度), Result(结果)></code> 泛型的三个参数类型。</li>
<li>重写以下方法:</li>
</ul>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onPreExecute</span><span class="params">()</span> <span class="comment">//可选</span></span></div><div class="line"><span class="keyword">protected</span> <span class="keyword">abstract</span> Result <span class="title">doInBackground</span><span class="params">(Params... params)</span>; <span class="comment">//必须重写</span></div><div class="line"><span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onPostExecute</span><span class="params">(Result result)</span> <span class="comment">//可选,但一般都会重写</span></span></div><div class="line"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onProgressUpdate</span><span class="params">(Progress... values)</span> <span class="comment">//可选,如果不需要进度可以写Void(大写的V)</span></div></pre></td></tr></table></figure>
<p>注意:</p>
<ol>
<li><code>onPreExecute</code> 方法会在execute方法调用前调用,运行在UI线程,<code>可以做进度框的展示等</code> ;</li>
<li><code>doInBackground</code>方法的参数是可选参数,类型由创建类时决定,并且该方法是执行在子线程中的,<code>可以做一些耗时操作</code>;</li>
<li><code>onPostExecute</code> 方法的参数也是创建类时决定,可以是String、Bitmap类型等,运行在UI线程中,根据返回的result,这里的result的类型就是<code>doInBackground</code> 的返回值类型,因此<code>可以更新UI</code> ;</li>
<li><code>onProgressUpdate</code> 方法的参数是可选参数,<code>可以展示任务处理的进度</code>,不过需要通过在<code>doInBackground</code> 中根据下载内容占总下载内容的比例主动调用<code>publishProgress</code> 方法,才会回调<code>onProgressUpdate</code> 方法。</li>
</ol>
<ul>
<li>实例化该异步任务类,并调用<code>AsyncTask execute(Params... params)</code> 方法启动任务。</li>
</ul>
<p class="article-more-link">
<a href="/2017/08/16/你会使用AsyncTask吗?/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/AsycTask/">AsycTask</a><a href="/tags/Handler/">Handler</a><a href="/tags/Message/">Message</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/24/有一种优雅的架构叫MVP架构/" title="有一种优雅的架构叫MVP架构" itemprop="url">有一种优雅的架构叫MVP架构</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-24T06:41:13.000Z" itemprop="datePublished"> 发表于 2017-02-24</time>
</p>
</header>
<div class="article-content">
<p>软件开发总是强调一个重点,就是尽可能的将系统做到高内聚低耦合,各模块各司其职,职责单一,逻辑清晰。</p>
<p><img src="/2017/02/24/有一种优雅的架构叫MVP架构/mvp框架图.png" alt="mvp框架图"></p>
<p>从上图可以清晰的理解什么是MVP(Model、View、Presenter)架构,其实MVP是从MVC模式衍生出来的,目的就是为了让视图层view和模型层model之间解耦。它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:<strong>在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。</strong>在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。</p>
<h3 id="从职责上来说MVP是:"><a href="#从职责上来说MVP是:" class="headerlink" title="从职责上来说MVP是:"></a>从职责上来说MVP是:</h3><ul>
<li><strong>View</strong>层负责处理用户事件和视图部分的展示。在Android中,它可能是Activity或者Fragment类。</li>
<li><strong>Model</strong>层负责访问数据。数据可以是远端的Server API,本地数据库或者SharedPreference等。</li>
<li><strong>Presenter</strong>层是连接(或适配)View和Model的桥梁。</li>
</ul>
<p class="article-more-link">
<a href="/2017/02/24/有一种优雅的架构叫MVP架构/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/MVP/">MVP</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/22/Android自学路线/" title="Android自学路线" itemprop="url">Android自学路线</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-22T03:30:05.000Z" itemprop="datePublished"> 发表于 2017-02-22</time>
</p>
</header>
<div class="article-content">
<p><img src="/2017/02/22/Android自学路线/Android自学大纲.png" alt="Android自学大纲"></p>
<p>详细的展开图:<a href="http://naotu.baidu.com/file/9dd56a401773144e7c203e4a24fe5b20?token=4816861fa3bfe992" target="_blank" rel="external">http://naotu.baidu.com/file/9dd56a401773144e7c203e4a24fe5b20?token=4816861fa3bfe992</a></p>
<p>各章节讲解<a href="http://www.runoob.com/w3cnote/android-tutorial-intro.html" target="_blank" rel="external">http://www.runoob.com/w3cnote/android-tutorial-intro.html</a></p>
<p>感谢<a href="https://github.com/coder-pig" target="_blank" rel="external">coder-pig</a> 的分享,Android入门之路。另附<a href="http://blog.csdn.net/coder_pig" target="_blank" rel="external">Coder-Pig的猪栏</a></p>
<p class="article-more-link">
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/Android/">Android</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/17/如何创建和使用SQLite数据库/" title="如何创建和使用SQLite数据库" itemprop="url">如何创建和使用SQLite数据库</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-17T02:07:51.000Z" itemprop="datePublished"> 发表于 2017-02-17</time>
</p>
</header>
<div class="article-content">
<h3 id="什么是SQLite?"><a href="#什么是SQLite?" class="headerlink" title="什么是SQLite?"></a>什么是SQLite?</h3><p>SQLite是一款轻型数据库,它遵守ACID,能够嵌入到使用它的应用程序中。作为一个自包含的、基于文件的数据库,SQLite提供了非常出色的工具集能够处理所有类型的数据,与托管在服务器上基于进程的关系型数据库相比它的约束更少,也更易用。</p>
<p>当应用程序使用SQLite时,SQLite并非作为一个独立进程通过某种通信协议(例如socket)与应用程序通信,而是作为应用程序的一部分,应用程序通过调用SQLite的接口直接访问数据文件。</p>
<h3 id="为什么要用-SQLite?"><a href="#为什么要用-SQLite?" class="headerlink" title="为什么要用 SQLite?"></a>为什么要用 SQLite?</h3><ul>
<li>不需要一个单独的服务器进程或操作的系统(无服务器的)。</li>
<li>SQLite 不需要配置,这意味着不需要安装或管理。</li>
<li>一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。</li>
<li>SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。</li>
<li>SQLite 是自给自足的,这意味着不需要任何外部的依赖。</li>
<li>SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。</li>
<li>SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。</li>
<li>SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。</li>
<li>SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。</li>
</ul>
<p class="article-more-link">
<a href="/2017/02/17/如何创建和使用SQLite数据库/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/SQLite/">SQLite</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/16/见贤思齐/" title="见贤思齐" itemprop="url">见贤思齐</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-16T04:27:45.000Z" itemprop="datePublished"> 发表于 2017-02-16</time>
</p>
</header>
<div class="article-content">
<h3 id="看别人的技术博客"><a href="#看别人的技术博客" class="headerlink" title="看别人的技术博客"></a>看别人的技术博客</h3><ul>
<li><p><a href="http://a.codekk.com/">CodeKK</a> —— 专注于开源项目源码解析及优秀开源项目的分享</p>
</li>
<li><p><a href="http://www.trinea.cn/">Trinea</a> —— 性能优化、源码解析</p>
</li>
<li><p><a href="http://blog.csdn.net/Luoshengyang">老罗的Android之旅</a> —— Android系统源代码分析</p>
</li>
<li><p><a href="http://www.devtf.cn/">开发技术前线</a> —— 《Android源码设计模式》作者 Mr.Simple 维护的社区网站</p>
</li>
<li><p><a href="http://blog.csdn.net/aigestudio">爱哥</a> ——《Android源码设计模式》作者 关爱民</p>
</li>
<li><p><a href="http://blog.csdn.net/singwhatiwanna">任玉刚</a> —— 《Android开发艺术探索》作者 CSDN博客</p>
</li>
<li><p><a href="http://blog.csdn.net/guolin_blog">郭霖</a> —— 《第一行代码》作者 CSDN博客</p>
</li>
<li><p><a href="http://blog.csdn.net/lmj623565791">鸿洋</a> —— CSDN 博客专家</p>
</li>
<li><p><a href="http://hukai.me/">胡凯</a> —— 专注性能优化</p>
</li>
<li><p><a href="http://www.jianshu.com/users/e6885381f7d4/latest_articles">张明云</a> —— Android学习之路</p>
</li>
<li><p><a href="http://drakeet.me/">Drakeet</a> —— 贝壳单词APP开发者</p>
</li>
<li><p><a href="http://blog.csdn.net/eclipsexys">徐宜生</a> —— 《Android群英传》作者</p>
</li>
<li><p><a href="http://blog.daimajia.com/">代码家</a> —— 著名博主</p></li></ul>
<p class="article-more-link">
<a href="/2017/02/16/见贤思齐/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/15/EditText里怎么自带删除按钮/" title="EditText里怎么自带删除按钮" itemprop="url">EditText里怎么自带删除按钮</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-15T06:49:48.000Z" itemprop="datePublished"> 发表于 2017-02-15</time>
</p>
</header>
<div class="article-content">
<p><img src="/2017/02/15/EditText里怎么自带删除按钮/带删除按钮的编辑框.png" width="40%"></p>
<p>对于普通的编辑框,它的功能就是负责接收用户输入的信息,在实际开发中,常常会有这样的设计,就是在输入内容后,编辑框的内部右侧会出现一个删除按钮,点击后会清空编辑框里的内容,这样的交互是极好的,那这又是怎么实现的呢?</p>
<p>解决思路毫无疑问是——继承自EditText,自定义文本编辑框</p>
<ul>
<li>为EditText设置addTextChangeListener</li>
<li>创建内部类实现TextWatcher接口,监听输入框文本的变化</li>
<li>改写onTouchEvent事件,点击叉号位置,清空文本</li>
<li>通过setCompoundDrawablesWithIntrinsicBounds方法为EditText设置图片</li>
</ul>
<p class="article-more-link">
<a href="/2017/02/15/EditText里怎么自带删除按钮/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/EditText/">EditText</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2017/02/14/Android中丰富的对话框/" title="Android中丰富的对话框" itemprop="url">Android中丰富的对话框</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2017-02-14T07:01:47.000Z" itemprop="datePublished"> 发表于 2017-02-14</time>
</p>
</header>
<div class="article-content">
<p>Android中对话框的展示,对人机交互有着重要的意义,常见的对话框包括:</p>
<ul>
<li><p>警告对话框</p>
</li>
<li><p>进度对话框</p>
</li>
<li><p>日期选择对话框</p>
</li>
<li><p>时间选择对话框</p>
</li>
<li><p>普通列表对话框</p>
</li>
<li><p>单选列表对话框</p>
</li>
<li><p>多选列表对话框</p>
</li>
<li><p>带图标的列表对话框</p>
</li>
</ul>
<p>对于特殊的对话框形式还可以<code>自定义对话框</code></p>
<p class="article-more-link">
<a href="/2017/02/14/Android中丰富的对话框/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/Dialog/">Dialog</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2016/12/20/为什么Android要使用各种BroadcastReceiver?/" title="为什么Android要使用各种BroadcastReceiver?" itemprop="url">为什么Android要使用各种BroadcastReceiver?</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2016-12-20T05:58:20.000Z" itemprop="datePublished"> 发表于 2016-12-20</time>
</p>
</header>
<div class="article-content">
<p>作为Android四大组件之一的BroadcastReceiver(广播接收者),同Activity(活动)一样,经常被大家用到,网上也是一堆对它的讲解,那么为什么Android要用广播接收者这种机制呢?</p>
<p>广播分为:普通广播和有序广播</p>
<p>1.<strong>Normal broadcasts</strong>(普通广播):Normal broadcasts是完全异步的可以同一时间被所有的接收者接收到。消息的传递效率比较高。但缺点是接收者不能将接收的消息的处理信息传递给下一个接收者也不能停止消息的传播。可以利用Context.sendBroadcast发送。</p>
<p>2.<strong>Ordered broadcasts</strong>(有序广播):Ordered broadcasts的接收者按照一定的优先级进行消息的接收。一次传送到一个接收器。 随着每个接收器依次执行,它可以将结果传播到下一个接收器,或者它可以完全中止广播,使得它不会被传递到其他接收器。 命令接收器运行可以用匹配的意图过滤器的<code>android:priority</code>属性控制; 具有相同优先级的接收器将以任意顺序运行。可以利用Context.sendOrderedBroadcast发送。</p>
<p class="article-more-link">
<a href="/2016/12/20/为什么Android要使用各种BroadcastReceiver?/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/BroadcastReceiver/">BroadcastReceiver</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2016/12/17/如何利用LruCache进行数据缓存/" title="如何利用LruCache进行数据缓存" itemprop="url">如何利用LruCache进行数据缓存</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2016-12-17T13:10:02.000Z" itemprop="datePublished"> 发表于 2016-12-17</time>
</p>
</header>
<div class="article-content">
<h3 id="1、LruCache是什么?"><a href="#1、LruCache是什么?" class="headerlink" title="1、LruCache是什么?"></a>1、LruCache是什么?<img src="/2016/12/17/如何利用LruCache进行数据缓存/目瞪口呆.jpg" width="80"></h3><p>最初我也不知道去缓存请求到的数据,直接都是通过http请求,根据得到的返回数据展示到界面上,网络不好时要等待好久请求才能成功,或者干脆就失败了,这样给用户的体验是很不好的。之后在学习中,了解到了Android SDK中有处理缓存的LruCache,这个LruCache是在android.util包下的,是API level 12引入的,对于API level 12之前的系统可以使用support library v4中的LruCache。</p>
<p><strong>1.LruCache是一个泛型类。</strong><br><strong>2.LRU是Least Recently Used的缩写,即“最近最少使用”,说明LRU缓存算法的淘汰策略是把最近最少使用的数据移除,让出内存给最新读取的数据。</strong><br><strong>3.它采用的是内存缓存数据,它内部采用一个LinkedHashMap以强引用的方式存储外界的缓存对象。</strong><br><strong>4.它是线程安全的。</strong><br><strong>5.其中提供了put、get、remove方法来完成缓存的添加、获取和移除操作。</strong><br><strong>6.每次添加的缓存对象会置顶,当缓存满时,LruCache会移除较早使用的缓存对象,然后再添加新的缓存对象。</strong></p>
<p>通常我们需要用到的缓存策略,简单的来说是将从网络请求得到的数据先缓存到内存中,等到下次再请求的时候,先从缓存中去获取,如果缓存中有,就将缓存数据取出;如果没有,则再从网络上请求,这是一种基本的缓存策略。</p>
<h3 id="2、如何使用LruCache?"><a href="#2、如何使用LruCache?" class="headerlink" title="2、如何使用LruCache?"></a>2、如何使用LruCache?</h3>
<p class="article-more-link">
<a href="/2016/12/17/如何利用LruCache进行数据缓存/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/LruCache/">LruCache</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<article class="post-expand post" itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2016/12/15/Android-Studio,最好用的Android编辑器,没有之一/" title="Android Studio,最好用的Android编辑器,没有之一" itemprop="url">Android Studio,最好用的Android编辑器,没有之一</a>
</h1>
<p class="article-author">By
<a href="/about" title="Fleming Chen" target="_blank" itemprop="author">Fleming Chen</a>
</p><p class="article-time">
<time datetime="2016-12-15T05:54:33.000Z" itemprop="datePublished"> 发表于 2016-12-15</time>
</p>
</header>
<div class="article-content">
<h2 id="初识Android之体验篇"><a href="#初识Android之体验篇" class="headerlink" title="初识Android之体验篇"></a>初识Android之体验篇</h2><p>还记得最初接触Android是在我大二的时候,那时下学期刚开学,每逢开学季学校的移动电信营业厅都会做各种促销活动,新款的手机当然也包括在内。当时我就有听说过Android手机有好多炫酷的操作和功能,能很方便的听音乐,看电影什么的,所以我果断打算买一个新手机,华为c8812电信版。</p>
<p><img src="/2016/12/15/Android-Studio,最好用的Android编辑器,没有之一/hw-c8812.png" alt="hw-c8812"></p>
<p>相对于之前使用过的电阻屏的手机来说,这种电容屏的手机操作起来,感觉简直太棒了,再加上新的Android 4.0系统,界面也相对的更加鲜艳亮丽,后来了解到这个版本叫Ice Cream Sandwich(冰淇淋三明治),这个手机可以拍照、3G上网、下软件、听音乐、看电影、玩游戏,几乎原来电脑上可以干的,手机都可以做到,而且更方便。可以说当时对Android的印象都是来自于对手机的体验,虽然当时的手机市场还是苹果占据主要地位,但是iPhone的价格还是太贵,对于我来说,并没有那么多钱去买,而Android手机价格亲民,也能满足我的基本需求,这点我就很满意了,对于这个客观事实,我也就自然而然的选择了Android阵营,对它充满了好奇,想知道为什么我点了一个图标,就可以打开一个界面,图片、声音都可以展现出来;为什么有时候会有对话框提示,通知消息;为什么我手机用久了就会卡卡的,好多关于Android的疑问。</p>
<p class="article-more-link">
<a href="/2016/12/15/Android-Studio,最好用的Android编辑器,没有之一/#more">Read More</a>
</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-tags">
<span></span> <a href="/tags/Android/">Android</a><a href="/tags/Eclipse-ADT/">Eclipse ADT</a><a href="/tags/Android-Studio/">Android Studio</a>
</div>
</div>
<div class="comments-count">
</div>
</footer>
</article>
<nav id="page-nav" class="clearfix">
<span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="extend next" rel="next" href="/page/2/">Next<span></span></a>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="github-card">
<p class="asidetitle">Github 名片</p>
<div class="github-card" data-github="flemingme" data-theme="medium"></div>
<script type="text/javascript" src="//cdn.jsdelivr.net/github-cards/latest/widget.js"></script>
</div>
<div class="tagslist">
<p class="asidetitle">标签</p>
<ul class="clearfix">
<li><a href="/tags/Android/" title="Android">Android<sup>2</sup></a></li>
<li><a href="/tags/Dialog/" title="Dialog">Dialog<sup>1</sup></a></li>
<li><a href="/tags/LruCache/" title="LruCache">LruCache<sup>1</sup></a></li>
<li><a href="/tags/hexo/" title="hexo">hexo<sup>1</sup></a></li>
<li><a href="/tags/Eclipse-ADT/" title="Eclipse ADT">Eclipse ADT<sup>1</sup></a></li>
<li><a href="/tags/Android-Studio/" title="Android Studio">Android Studio<sup>1</sup></a></li>
<li><a href="/tags/BroadcastReceiver/" title="BroadcastReceiver">BroadcastReceiver<sup>1</sup></a></li>
<li><a href="/tags/Git/" title="Git">Git<sup>1</sup></a></li>
<li><a href="/tags/EditText/" title="EditText">EditText<sup>1</sup></a></li>
<li><a href="/tags/SQLite/" title="SQLite">SQLite<sup>1</sup></a></li>
<li><a href="/tags/MVP/" title="MVP">MVP<sup>1</sup></a></li>
<li><a href="/tags/AsycTask/" title="AsycTask">AsycTask<sup>1</sup></a></li>
<li><a href="/tags/Handler/" title="Handler">Handler<sup>1</sup></a></li>
<li><a href="/tags/Message/" title="Message">Message<sup>1</sup></a></li>
</ul>
</div>
<div class="linkslist">
<p class="asidetitle">友情链接</p>
<ul>
<li>
<a href="https://www.oschina.net/android" target="_blank" title="Androdi开发专区">Androdi开发专区</a>
</li>
<li>
<a href="http://stormzhang.com" target="_blank" title="stormzhang">stormzhang</a>
</li>
<li>
<a href="http://pengtao.me" target="_blank" title="CPPAlien">CPPAlien</a>
</li>
<li>
<a href="http://wuxiaolong.me" target="_blank" title="吴小龙同學">吴小龙同學</a>
</li>
<li>
<a href="http://andyleeblog.cn" target="_blank" title="Andy">Andy</a>
</li>
<li>
<a href="https://lawaias.github.io" target="_blank" title="LawAias">LawAias</a>
</li>
<li>
<a href="http://www.yumez.cn" target="_blank" title="yuez">yuez</a>
</li>
<li>
<a href="https://kotliner.cn" target="_blank" title="Kotlin">Kotlin</a>
</li>
</ul>
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
<div class="weiboshow">
<p class="asidetitle">新浪微博</p>
<iframe width="100%" height="119" class="share_self" frameborder="0" scrolling="no" src="http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=119&fansRow=2&ptype=1&speed=0&skin=9&isTitle=1&noborder=1&isWeibo=0&isFans=0&uid=null&verifier=&dpc=1"></iframe>
</div>
</aside>
</div>
</div>
<footer><div id="footer">
<div class="line">
<span></span>
<div class="author"></div>
</div>
<section class="info">
<p> Hello ,I'm Larry Page in Google. <br>
This is my blog,believe it or not.</p>
</section>
<div class="social-font" class="clearfix">
<a href="https://github.com/flemingme" target="_blank" class="icon-github" title="github"></a>
<a href="https://twitter.com/fleming_chen" target="_blank" class="icon-twitter" title="twitter"></a>
<a href="http://www.zhihu.com/people/flemingchen" target="_blank" class="icon-zhihu" title="知乎"></a>
<a href="mailto:[email protected]" target="_blank" class="icon-email" title="Email Me"></a>
</div>
<p class="copyright">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2017
<a href="/about" target="_blank" title="Fleming Chen">Fleming Chen</a>
</p>
</div></footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" media="screen" type="text/css">
<script src="/fancybox/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.article-content').each(function(i){
$(this).find('img').each(function(){
if ($(this).parent().hasClass('fancybox')) return;
var alt = this.alt;
if (alt) $(this).after('<span class="caption">' + alt + '</span>');
$(this).wrap('<a href="' + this.src + '" title="' + alt + '" class="fancybox"></a>');
});
$(this).find('.fancybox').each(function(){
$(this).attr('rel', 'article' + i);
});
});
if($.fancybox){
$('.fancybox').fancybox();
}
});
</script>
<!-- Analytics Begin -->
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?e6d1f421bbc9962127a50488f9ed37d1";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>