Android开发技术周报 Issue#104
MQZIsiah
8年前
<h3><strong>新闻</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723987136089346" rel="nofollow,noindex">Google已正式结束对Eclipse Android开发工具的支持</a></p> </li> <li> <p><a href="/misc/goto?guid=4959723987227911800" rel="nofollow,noindex">Google Play推出软件新订阅户折扣功能</a></p> </li> </ol> <h3><strong>教程</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723987315198293" rel="nofollow,noindex">记一次 StackOverflow 崩溃分析: Proguard 5.3 错改指令</a></p> <p>近期工作主要在细化项目的proguard混淆规则, 简单的去掉一些暴力keep, 可以减少项目1k+的方法数. 在删除某些配置之后, 尽管我知道对功能没有影响, 还是会去测一下功能是否正常. 于是就遇到了一个隐藏在主干上的StackOverflow崩溃。从堆栈上看, 匿名内部类的run调MyApp.startActivity, MyApp.startActivity又new了一个Runnable, 它的run继续调MyApp.startActivity, 最终栈溢出. 看了堆栈, 还以为是一个简单的问题, 直接去找到了代码.</p> </li> <li> <p><a href="/misc/goto?guid=4959723987395888626" rel="nofollow,noindex">安卓自定义View进阶-MotionEvent详解</a></p> <p>Android MotionEvent 详解,之前用了两篇文章 <a href="/misc/goto?guid=4959719929735849958" rel="nofollow,noindex">事件分发机制原理</a> 和 <a href="/misc/goto?guid=4959723987511621800" rel="nofollow,noindex">事件分发机制详解</a> 来讲解事件分发,而作为事件分发主角之一的 MotionEvent 并没有过多的说明,本文就带大家了解 MotionEvent 的相关内容,简要介绍触摸事件,主要包括 单点触控、多点触控、鼠标事件 以及 getAction() 和 getActionMasked() 的区别。</p> </li> </ol> <p>Android 将所有的输入事件都放在了 MotionEvent 中,随着安卓的不断发展壮大,MotionEvent 也开始变得越来越复杂,</p> <ol> <li> <p><a href="/misc/goto?guid=4959723987595032010" rel="nofollow,noindex">Android系统中的进程管理:进程的优先级</a></p> <p>本文会主要讲解Android系统对于进程优先级的管理。优先级反应了系统对于进程重要性的判定。当系统剩余内存很低的时候,系统便会按照进程的优先级倒序杀死进程以回收内存。关于系统如何回收进程我们会在后面的文章中讲解,本文主要讲解系统对于进程优先级的判断依据和计算方法。在Processes and Threads (如果你还没有阅读,请立即阅读一下这篇文章)一文中,我们已经了解到,系统对于进程的优先级有如下五个分类:前台进程、可见进程、服务进程、后台进程、空进程,这只是一个粗略的划分。其实,在系统的内部实现中,优先级远不止这么五种。</p> </li> <li> <p><a href="/misc/goto?guid=4959723987677672659" rel="nofollow,noindex">Android 7.0中的多窗口实现解析</a></p> <p>在以往的Android系统上,所有Activity都是全屏的,如果不设置透明效果,一次只能看到一个Activity界面。但是从Android N(7.0)版本开始,系统支持了多窗口功能。在有了多窗口支持之后,用户可以同时打开和看到多个应用的界面。并且系统还支持在多个应用之间进行拖拽。在大屏幕设备上,这一功能非常实用。本文将详细讲解Android系统中多窗口功能的实现。</p> </li> <li> <p><a href="/misc/goto?guid=4959723987769332376" rel="nofollow,noindex">DataBinding实现原理探析</a></p> <p>DataBinding 技术的出现,肯定是为了解决我们在开发中的一些痛点问题。所以,了解 DataBinding 要解决的问题,能够使我们更深刻地理解 DataBinding 技术的设计实现。从开发角度看,简言之,DataBinding 主要解决了两个问题:1.需要多次使用 findViewById,损害了应用性能且令人厌烦 2.更新UI数据需切换至UI线程,将数据分解映射到各个view比较麻烦,应该说,针对上述问题,都有第三方解决方案。第一个问题可以使用 Jake Wharton 的 ButterKnife;对于第二个问题,谷歌提供了 Loop-Handler 方案,你还可以使用 RxJava,EventBus 等方案,但它们只是解决了线程切换的问题,却没有解决将数据分解映射到各个view的问题,这正是 DataBinding 的魅力所在!</p> </li> <li> <p><a href="/misc/goto?guid=4959723987840545750" rel="nofollow,noindex">Activity 全屏,沉浸式模式这一篇就够了</a></p> <p>第一次在项目中要用到全屏功能的时候无从下手,然后就是去百度了。百度到的结果都是差不多的。不过直接把代码贴过来的确是可以用的。但是除了知道怎么做之外还想去理解它,因为只有理解了才能举一反三嘛。好在在后来的时候看到了官方的文档,写的非常详细。</p> </li> <li> <p><a href="/misc/goto?guid=4959723987920904170" rel="nofollow,noindex">Android研发安全-Activity组件安全(上)</a></p> <p>Activity组件是用户唯一能看见的组件,作为软件所有功能的显示载体,其安全性不言而喻。针对Activity组件安全,作为一个安卓开发者来讲需要在日常开发过程中注意两点:1.Activity访问权限的控制 2.Activity被劫持,本篇文章将分享Activity访问权限控制方面的安全问题,首先科普下基础知识,Activity类型和使用方式决定了其风险和防御方式,故将Activity分类如下: Private、Public、Parter、In-house, Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。</p> </li> <li> <p><a href="/misc/goto?guid=4959723988005183410" rel="nofollow,noindex">有赞Android客户端网络架构演进</a></p> <p>Android客户端网络请求是每一个应用都不可或缺的模块,其设计的好坏直接影响应用的性能和代码稳定性、扩展性。Android网络请求最开始官方只提供了最基础的方法,开发者必须在此基础上进行二次封装,这样就要求开发者对Http请求协议、缓存、JSON转换、错误处理以及线程切换等都比较熟悉,稳定性、可扩展性和可维护性都是比较大的挑战。</p> </li> <li> <p><a href="/misc/goto?guid=4959723988095587774" rel="nofollow,noindex">Android SurfaceView 源码分析及使用</a></p> <p>SurfaceView 是 Android 中一种比较特殊的视图(View),它跟平时时候的 TextView、Button 最大的区别是它跟它的视图容器并不是在同一个视图层上,它的 UI 显示也可以不在一个独立的线程中完成,所以对 SurfaceView 的绘制并不会影响到主线程的运行。综合这些特点,SurfaceView 一般用来实现动态的或者比较复杂的图像还有动画的显示。</p> </li> </ol> <h3><strong>开源库 & App</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723988173433266" rel="nofollow,noindex">Android-ScaleLayout</a></p> <p>一个简单的,方便的多屏适配的Android库</p> </li> <li> <p><a href="/misc/goto?guid=4959723988263214118" rel="nofollow,noindex">TyperEditText</a></p> <p>仿打字机效果</p> </li> <li> <p><a href="/misc/goto?guid=4959723988343448050" rel="nofollow,noindex">RaiflatButton</a></p> <p>A raised button that lowers down to 0dp of elevation</p> </li> <li> <p><a href="/misc/goto?guid=4959723988431936815" rel="nofollow,noindex">FloatingView</a></p> <p>FloatingView can make the target view floating above the anchor view with cool animation</p> </li> <li> <p><a href="/misc/goto?guid=4959723988511211787" rel="nofollow,noindex">SquareMenu</a></p> <p>SquareMenu is a custom Floating Action Button with a different shape from traditional FABs and with three sub menu buttons.</p> </li> <li> <p><a href="/misc/goto?guid=4959723988591712098" rel="nofollow,noindex">Monotweety</a></p> <p>一个用 Kotlin 写的 推ter 客户端</p> </li> <li> <p><a href="/misc/goto?guid=4959723988682289355" rel="nofollow,noindex">SearchFilter</a></p> <p>Yalantis 开源的一个很赞的搜索框过滤效果</p> </li> <li> <p><a href="/misc/goto?guid=4959723988753067517" rel="nofollow,noindex">Sketch mirror</a></p> <p>Yet another Sketch Mirror App for Android.</p> </li> <li> <p><a href="/misc/goto?guid=4959723988843012820" rel="nofollow,noindex">MobileGuard</a></p> <p>一个管理安卓手机的应用,支持安卓7.0</p> </li> <li> <p><a href="/misc/goto?guid=4959723988911772975" rel="nofollow,noindex">YaMvp</a></p> <p>又一个Mvp库,超级简单,但有足够的功能</p> </li> <li> <p><a href="/misc/goto?guid=4959723988987349133" rel="nofollow,noindex">SuperTextView</a></p> <p>一个功能强大的TextView,可以满足日常大部分布局方式,开发者可已自行组合属性配置出属于自己风格的样式</p> </li> <li> <p><a href="/misc/goto?guid=4959723989070993529" rel="nofollow,noindex">dns66</a></p> <p>a DNS based ad blocker for Android.</p> </li> <li> <p><a href="/misc/goto?guid=4959723989161569979" rel="nofollow,noindex">roundbutton</a></p> <p>可设置圆角背景边框的的按钮</p> </li> </ol> <h3><strong>工具</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723989234475539" rel="nofollow,noindex">kap</a></p> <p>Mac 上轻量级 GIF 录屏小工具</p> </li> <li> <p><a href="/misc/goto?guid=4959723989320214053" rel="nofollow,noindex">scouter</a></p> <p>Scouter is an open source APM and an open source profiler for java application like web applications on a tomcat .</p> </li> </ol> <h3><strong>活动</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723989392897436" rel="nofollow,noindex">Google Developer Day China 2016</a></p> <p>Google 开发者大会是一个互动交流的大会,旨在与开发者们和科技行业领先者们分享 Google 的最新科技和开放平台。今年,Google 开发者大会将于12月8日和12月14日分别在北京和上海举办。我们非常高兴与你分享创新科技,并且鼓励开发者们去建立下一个伟大的移动网络或本地应用。这不仅是创新科技的互联网时代,更是属于每一位开发者的时代。</p> </li> </ol> <h3><strong>设计</strong></h3> <ol> <li> <p><a href="/misc/goto?guid=4959723989466845774" rel="nofollow,noindex">移动端用户体验:底部导航</a></p> <p>设计师都知道,设计不只是为了好看。设计也决定用户如何融入一个产品,无论是网站还是app。这是一种交谈。导航就是一种交谈。因为如果用户不明白使用方式,你的网站或app再漂亮都没用。</p> </li> </ol> <h3> </h3> <p>来自:http://www.androidweekly.cn/android-dev-weekly-issue-104/</p> <p> </p>