2017
08-19
08-19
Android非UI线程更新UI的探索
众所周知,在Android中如果在非UI线程更新UI的话,会抛出异常:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.因此我们很自然地认为只能在UI线程更新UI了。但是在实际开发中,有时可能有在非UI线程更新UI的需求,如:想通过非UI线程来预加载View。因此本文将探索在非UI线程更新UI的方式。checkThread突破口首先来找下突破口。从上面提到的异常开始切入,抛出该异常的代码如下:android.view....
继续阅读 >
Android内存泄漏是一个经常要遇到的问题,程序在内存泄漏的时候很容易导致OOM的发生。那么如何查找内存泄漏和避免内存泄漏就是需要知晓的一个问题,首先我们需要知道一些基础知识。Java的四种引用强引用:强引用是Java中最普通的引用,随意创建一个对象然后在其他的地方引用一下,就是强引用,强引用的对象Java宁愿OOM也不会回收他软引用:软引用是比强引用弱的引用,在Javagc的时候,如果软引用所引用的对象被回...
任何在用户界面模拟载体移动的场景便是导航。使用应用程序将两个用户屏幕连接到一起,便是一种导航。这个连接——无论它是什么——即是用户用来运送信息的载具。尽管创建一个导航很简单,但是去创造一个适当的导航并不容易。本文我们将研究一些Android上最常用的导航模式,解读它们是如何影响底层导航,如何正确的使用这些模式让它来符合用户的需求。1定义导航在看一些常见导航模式之前,先回顾一下关于软件...
关于Android模块化我有一些话不知当讲不当讲最近公司一个项目使用了模块化设计,本人参与其中的一个小模块开发,但是整体的设计并不是我架构设计的,开发半年有余,在此记录下来我的想法。模块化场景为什么需要模块化?当一个App用户量增多,业务量增长以后,就会有很多开发工程师参与同一个项目,人员增加了,原先小团队的开发方式已经不合适了。原先的一份代码,现在需要多个人来维护,每个人的代码质量也...
AndroidO推出了一项新的功能「FontsinXML」,借助这项功能,我们能够像使用其他资源文件一样使用字体,比较方便地实现App全局字体的替换。为了能够在API14或者以上的设备上使用FontsinXML特性,我们需要使用到SupportLibrary26。更多的内容可以参考「使用SupportLibrary」小节。在AndroidStudio中按照如下步骤将字体作为资源文件添加至工程:右键单击项目的app/res文件夹,然后选择New>An...
最近在做新业务需求的同时,我们在Android上遇到了一些之前没有碰到过的问题,截屏分享、WebView生成长图以及长图在各个分享渠道分享时图片模糊甚至分享失败等问题,在这过程中踩了很多坑,到目前为止绝大部分的问题都还算是有了比较满意的解决方案。以下就从三个方面来总结一下过程中遇到的挑战和最后的解决方案。一、概述最近在做新业务需求的同时,我们在Android上遇到了一些之前没有碰到过的问题,截屏分享、...
在应用开发中,我们常常会进行日志打印或者debug调试,以此来分析运行时的一些信息,便于发现bug和问题。AndroidStudio的Debug功能很好用,但是有时候有些情况下,就显得不是那么快捷和便利。比如我们调试的点在应用一打开的时候,很靠前,例如Application的onCreate方法中,以至于我们不能足够快的设置进程为debug模式虽然上面的情况可以通过AndroidStudio的debug运行来解决,但是如果项目很大的话,运行...
一、滑动效果的产生滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从而实现View跟随用户触摸的滑动而滑动。(1)、Android的坐标系Android中将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如下图:系...
一、AndroidView动画框架Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,控制的整个View,实现原理是每次绘制视图时View所在ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果没有完成就继续调用invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。视图动画使用简单,效...
Hello,大家好,我是Clock。最近一段时间在做Android应用安全方面的功课,本文进行简单梳理方便以后Review,有错误和遗漏之处还请大家指出。代码混淆Android开发除了部分功能采用C/C++编码外,其余主要都是采用Java进行编码开发功能。Java应用非常容易被反编译,Android自然也不例外。只要利用apktool等类似的反编译工具,就可以通过安装包获取源代码。Google为了保护开发者的知识产权,为Android提供了ProGuard混淆方...
在Android开发中,很多时候我们不需要修改*.gradle文件太多,我们添加依赖、修改targetcompile、最低支持APIlevel,或者修改签名配置和build类型。其它更复杂一些逻辑,我们最后可能就是从StackOverflow中copy了一些自己也不太懂的代码。本文中我们将一步一步介绍Android工程中用到的gradle文件及其背后的原理。1.Groovy1.1语法Gradle文件其实是用Groovy脚本写的,我们都会写java,所以入门Groovy非常简单。...
了解我的人知道,我是一名不折不扣的G粉,一直在关注Google,最近Google有一些小动作,可能很多人不太了解,借这个机会,给大家普及下。而且断断续续有人问我一些这样的问题,比如:Android的前景怎么样?我想学习编程,到底学什么更好呢?移动互联网已经走下坡路了,下一个风口是什么呢?对于Google的一些动作,我有一些思考以及自己的看法,分享给你们,很可能看完之后以上问题就有答案了。PWA...
开篇语前阵子老大交给了我一个任务,主要是帮我们开发的直播应用做Android端的安装包瘦身,花了大概一周的时间把安装包从18MB减小到了12.5MB。原本完全可以优化到10MB之下,但由于其他原因的限制,所以目前阶段只到12.5MB为止。在此记录一下优化的思路和用到的工具,方便自己以后Review,有需要的童鞋也可供参考。瘦身的目的从目的导向来看,我们是不会无缘无故去做一件事情的,那我们对应用瘦身的目的...