-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
6 lines (6 loc) · 21.8 KB
/
index.html
File metadata and controls
6 lines (6 loc) · 21.8 KB
1
2
3
4
5
6
<!DOCTYPE html><html lang="zh-CN"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description"><title>Spiny | Stay Hungry, Stay Foolish, Stay Uncomfortable.</title><link rel="stylesheet" type="text/css" href="/css/style.css?v=0.0.0"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/normalize/6.0.0/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/pure/0.6.2/pure-min.css"><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/pure/0.6.2/grids-responsive-min.css"><link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css"><script type="text/javascript" src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><link rel="Shortcut Icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon-precomposed" href="/apple-touch-icon.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"></head><body><div class="body_container"><div id="header"><div class="site-name"><h1 class="hidden">Spiny</h1><a id="logo" href="/.">Spiny</a><p class="description">Stay Hungry, Stay Foolish, Stay Uncomfortable.</p></div><div id="nav-menu"><a href="/." class="current"><i class="fa fa-home"> 首页</i></a><a href="/archives/"><i class="fa fa-archive"> 归档</i></a><a href="/about/"><i class="fa fa-user"> 关于</i></a><a href="/atom.xml"><i class="fa fa-rss"> 订阅</i></a></div></div><div id="layout" class="pure-g"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title"><a href="/2017/02/03/ma_get_start_en/">The guide of the ModularizationArchitecture</a></h1><div class="post-meta">2017-02-03</div><a href="/2017/02/03/ma_get_start_en/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2017/02/03/ma_get_start_en/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p><font color="red" size="4">Githup Repository:<a href="https://github.com/SpinyTech/ModularizationArchitecture" target="_blank" rel="external">ModularizationArchitecture</a><br>My Homepage:<a href="https://github.com/SpinyTech" target="_blank" rel="external">SpinyTech</a><br>Welcome to add star and follow.</font><br><br><br>ModularizationArchitecture is a routing-based multi-process, component-based architecture on the Android platform: it communicates with different modules and processes by sharing routes without referring to other modules. It is suitable for medium-sized App architecture team collaboration, parallel development, business line decoupling, white-box testing and other scenes.</p></div><p class="readmore"><a href="/2017/02/03/ma_get_start_en/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2017/02/01/ma_get_start_cn/">ModularizationArchitecture 使用教程</a></h1><div class="post-meta">2017-02-01</div><a href="/2017/02/01/ma_get_start_cn/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2017/02/01/ma_get_start_cn/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p><font color="red" size="4">项目地址:<a href="https://github.com/SpinyTech/ModularizationArchitecture" target="_blank" rel="external">ModularizationArchitecture</a><br>个人主页:<a href="https://github.com/SpinyTech" target="_blank" rel="external">SpinyTech</a><br>欢迎各位读者 Star Follow</font><br><br><br>ModularizationArchitecture 是Android平台上一种基于路由的多进程、组件化架构:它通过共有路由,在不引用其他模块的前提下,实现不同模块,不同进程之间的通信。它适合中型App架构的团队协作,并行开发,业务线解耦,白盒测试等场景。 </p></div><p class="readmore"><a href="/2017/02/01/ma_get_start_cn/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2017/01/10/concurrent_object_pool/">高并发对象池思考</a></h1><div class="post-meta">2017-01-10</div><a href="/2017/01/10/concurrent_object_pool/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2017/01/10/concurrent_object_pool/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>这两天在整理一套Android的路由框架,在整理的过程中,发现在路由消息传递过程中,传输载体类会大量的生成,对于这种载体类来说,他们本身是可重复利用的,并不需要大量的创建,大量的废弃,所以,我打算引入对象池,来解决类的重复创建问题。</p>
<h3 id="对象的生命周期"><a href="#对象的生命周期" class="headerlink" title="对象的生命周期"></a>对象的生命周期</h3><p>Java对象的生命周期大致包括三个阶段:<strong>对象的创建,对象的使用,对象的清除</strong>。因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3。其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间。由此,我们可以看出,只有T2是真正有效的时间,而T1、T3则是对象本身的开销。所以,避免和减少T1和T3的时间,能有效的提升程序的性能。</p></div><p class="readmore"><a href="/2017/01/10/concurrent_object_pool/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/12/28/android_modularization/">Android架构思考(模块化、多进程)</a></h1><div class="post-meta">2016-12-28</div><a href="/2016/12/28/android_modularization/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/12/28/android_modularization/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>关于<strong>模块化(组件化)</strong>这个问题,我想每个开发者可能都认真的思考过。随着项目的开发,<strong>业务不断壮大,业务模块越来越多,各个模块间相互引用,耦合越来越严重</strong>,同时有些项目(比如我们公司)还伴随着子应用单独包装推广,影子应用单独发布等等需求,重新调整架构迫在眉睫。今天,我们就来聊聊模块化(组件化),这篇文章同时也是我这几年,对项目架构的理解。</p></div><p class="readmore"><a href="/2016/12/28/android_modularization/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/12/19/android_view_on_draw/">View绘制分析笔记之onDraw</a></h1><div class="post-meta">2016-12-19</div><a href="/2016/12/19/android_view_on_draw/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/12/19/android_view_on_draw/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>上一篇文章我们了解了View的onLayout,那么今天我们来学习Android View绘制三部曲的最后一步,onDraw,绘制。 </p>
<h2 id="ViewRootImpl-performDraw"><a href="#ViewRootImpl-performDraw" class="headerlink" title="ViewRootImpl#performDraw"></a>ViewRootImpl#performDraw</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">private void performDraw() {</span><br><span class="line"></span><br><span class="line"> ···</span><br><span class="line"> final boolean fullRedrawNeeded = mFullRedrawNeeded;</span><br><span class="line"> mFullRedrawNeeded = false;</span><br><span class="line"></span><br><span class="line"> mIsDrawing = true;</span><br><span class="line"> Trace.traceBegin(Trace.TRACE_TAG_VIEW, "draw");</span><br><span class="line"> try {</span><br><span class="line"> draw(fullRedrawNeeded);</span><br><span class="line"> } finally {</span><br><span class="line"> mIsDrawing = false;</span><br><span class="line"> Trace.traceEnd(Trace.TRACE_TAG_VIEW);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> ···</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p class="readmore"><a href="/2016/12/19/android_view_on_draw/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/12/15/android_view_on_layout/">View绘制分析笔记之onLayout</a></h1><div class="post-meta">2016-12-15</div><a href="/2016/12/15/android_view_on_layout/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/12/15/android_view_on_layout/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>上一篇文章我们了解了View的onMeasure,那么今天我们继续来学习Android View绘制三部曲的第二步,onLayout,布局。 </p>
<h2 id="ViewRootImpl-performLayout"><a href="#ViewRootImpl-performLayout" class="headerlink" title="ViewRootImpl#performLayout"></a>ViewRootImpl#performLayout</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth,</span><br><span class="line"> int desiredWindowHeight) {</span><br><span class="line"> mLayoutRequested = false;</span><br><span class="line"> mScrollMayChange = true;</span><br><span class="line"> mInLayout = true;</span><br><span class="line"></span><br><span class="line"> final View host = mView;</span><br><span class="line"> if (DEBUG_ORIENTATION || DEBUG_LAYOUT) {</span><br><span class="line"> Log.v(mTag, "Laying out " + host + " to (" +</span><br><span class="line"> host.getMeasuredWidth() + ", " + host.getMeasuredHeight() + ")");</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> Trace.traceBegin(Trace.TRACE_TAG_VIEW, "layout");</span><br><span class="line"> try {</span><br><span class="line"> host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());</span><br><span class="line"></span><br><span class="line"> mInLayout = false;</span><br><span class="line"> //此处省略的代码是在layout的过程中,重复的requestLayout,需要做的处理。</span><br><span class="line"> //具体的处理方案是重新measure,layout。</span><br><span class="line"> ...</span><br><span class="line"> } finally {</span><br><span class="line"> Trace.traceEnd(Trace.TRACE_TAG_VIEW);</span><br><span class="line"> }</span><br><span class="line"> mInLayout = false;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p class="readmore"><a href="/2016/12/15/android_view_on_layout/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/12/12/android_view_on_measure/">View绘制分析笔记之onMeasure</a></h1><div class="post-meta">2016-12-12</div><a href="/2016/12/12/android_view_on_measure/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/12/12/android_view_on_measure/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>今天主要学习记录一下Android View绘制三部曲的第一步,onMeasure,测量。 </p>
<h2 id="起源"><a href="#起源" class="headerlink" title="起源"></a>起源</h2><p>在Activity中,所有的View都是DecorView的子View,然后DecorView又是被ViewRootImpl所控制,当Activity显示的时候,ViewRootImpl的<code>performTranversals</code>方法开始运行,这个方法很长,不过核心的三个流程就是依次调用performMeasure、performLayout、performDraw三个方法,从而完成DecorView的绘制。</p></div><p class="readmore"><a href="/2016/12/12/android_view_on_measure/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/12/02/android_view_draw_setcontentview/">Android 视图及View绘制分析笔记之setContentView</a></h1><div class="post-meta">2016-12-02</div><a href="/2016/12/02/android_view_draw_setcontentview/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/12/02/android_view_draw_setcontentview/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外。对于所有Android Developer来说,我们接触最多的控件就是View。通常,我们使用自定义View,需要了解最多的除了事件分发,就是View的绘制过程。然而关于View的绘制,涉及到的知识点纷繁复杂,这么多的代码知识,要梳理起来,肯定是先要找个头。那么平常我们用的最多的方法是哪个方法呢?当然是<code>setContentView()</code>!</p></div><p class="readmore"><a href="/2016/12/02/android_view_draw_setcontentview/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/11/20/android_multiple_process_notice/">Android多进程注意事项</a></h1><div class="post-meta">2016-11-20</div><a href="/2016/11/20/android_multiple_process_notice/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/11/20/android_multiple_process_notice/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>上篇文章<a href="http://blog.spinytech.com/2016/11/17/android_multiple_process_usage_scenario/">《Android多进程使用场景》</a>中,我们分析了一下多进程的使用场景,今天这篇文章,我们来聊聊Android多进程开发过程中可能会遇到的问题。</p></div><p class="readmore"><a href="/2016/11/20/android_multiple_process_notice/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2016/11/17/android_multiple_process_usage_scenario/">Android多进程使用场景</a></h1><div class="post-meta">2016-11-17</div><a href="/2016/11/17/android_multiple_process_usage_scenario/#comments" class="ds-thread-count cloud-tie-join-count"><span lang="join-count" style="margin: 0 3px 0 1px;" data-url="http://blog.spinytech.com/2016/11/17/android_multiple_process_usage_scenario/" class="join-count">0</span><span> 条参与</span></a><div class="post-content"><p>在上一篇<a href="http://blog.spinytech.com/2016/11/15/android_multiple_process/">《Android多进程介绍》</a>中,我们大概了解了一下Android中的进程的概念以及其生命周期,另外还有Low Memory Killer相关知识。了解完原理,就该进行实践了。今天这篇文章,我们就来聊一聊,到底如何利用多进程开发,使我们的应用更稳定、用户体验更好?换言之就是Android开发中多进程开发的使用场景分析。 </p></div><p class="readmore"><a href="/2016/11/17/android_multiple_process_usage_scenario/">阅读全文</a></p></div><nav class="page-navigator"><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/">下一页</a></nav><script>var yunModuleEnv = true;</script><script src="//img1.cache.netease.com/f2e/tie/yun/sdk/loader.js"></script><script>var yunTieProductKey = '0f87ec6e005c449a80b96eb3085150e4';
Tie.loader('aHR0cHM6Ly9hcGkuZ2VudGllLjE2My5jb20vZXh0ZW5kL2xpc3Rfam9pbl9zY3JpcHQuaHRtbA==', true);</script></div></div><div class="pure-u-1-4 hidden_mid_and_down"><div id="sidebar"><div class="widget"><form action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank" class="search-form"><input type="text" name="q" maxlength="20" placeholder="Search"/><input type="hidden" name="sitesearch" value="http://blog.spinytech.com"/></form></div><div class="widget"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Android/">Android</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Java/">Java</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/翻译/">翻译</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/翻译/" style="font-size: 15px;">翻译</a> <a href="/tags/架构/" style="font-size: 15px;">架构</a> <a href="/tags/高并发/" style="font-size: 15px;">高并发</a> <a href="/tags/对象池/" style="font-size: 15px;">对象池</a> <a href="/tags/ModularizationArchitecture/" style="font-size: 15px;">ModularizationArchitecture</a> <a href="/tags/RxJava/" style="font-size: 15px;">RxJava</a> <a href="/tags/Dagger2/" style="font-size: 15px;">Dagger2</a> <a href="/tags/架构思考/" style="font-size: 15px;">架构思考</a> <a href="/tags/模块化/" style="font-size: 15px;">模块化</a> <a href="/tags/多进程/" style="font-size: 15px;">多进程</a> <a href="/tags/View绘制/" style="font-size: 15px;">View绘制</a> <a href="/tags/Android视图/" style="font-size: 15px;">Android视图</a> <a href="/tags/Architecture/" style="font-size: 15px;">Architecture</a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/2017/02/03/ma_get_start_en/">The guide of the ModularizationArchitecture</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/02/01/ma_get_start_cn/">ModularizationArchitecture 使用教程</a></li><li class="post-list-item"><a class="post-list-link" href="/2017/01/10/concurrent_object_pool/">高并发对象池思考</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/28/android_modularization/">Android架构思考(模块化、多进程)</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/19/android_view_on_draw/">View绘制分析笔记之onDraw</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/15/android_view_on_layout/">View绘制分析笔记之onLayout</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/12/android_view_on_measure/">View绘制分析笔记之onMeasure</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/12/02/android_view_draw_setcontentview/">Android 视图及View绘制分析笔记之setContentView</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/11/20/android_multiple_process_notice/">Android多进程注意事项</a></li><li class="post-list-item"><a class="post-list-link" href="/2016/11/17/android_multiple_process_usage_scenario/">Android多进程使用场景</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://developer.android.com/index.html" title="Android Developer" target="_blank">Android Developer</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer">Copyright © 2017 <a href="/." rel="nofollow">Spiny.</a> Powered by<a rel="nofollow" target="_blank" href="https://hexo.io"> Hexo.</a><a rel="nofollow" target="_blank" href="https://github.com/tufu9441/maupassant-hexo"> Theme</a> by<a rel="nofollow" target="_blank" href="https://github.com/pagecho"> Cho.</a></div></div></div><a id="rocket" href="#top" class="show"></a><script type="text/javascript" src="/js/totop.js?v=0.0.0" async></script><script type="text/javascript" src="//cdn.bootcss.com/fancybox/3.0.47/jquery.fancybox.min.js" async></script><script type="text/javascript" src="/js/fancybox.js?v=0.0.0" async></script><link rel="stylesheet" type="text/css" href="//cdn.bootcss.com/fancybox/3.0.47/jquery.fancybox.min.css"><script type="text/javascript" src="/js/codeblock-resizer.js?v=0.0.0"></script><script type="text/javascript" src="/js/smartresize.js?v=0.0.0"></script></div></body></html>