在音视频蓬勃发展的今天、加之传统影像和AI的遭遇,在包含手机在内的终端产品上、OpenGL ES技术不可忽缺,习之~
Android AsyncTask的理解
AsyncTask可以正确,轻松地使用UI线程。 此类允许您执行后台操作并在UI线程上发布结果,而无需操纵Threads或者Handler。
AsyncTask被设计为围绕Thread和Handler的帮助类,并不是一个通用的线程框架。 理想情况下,AsyncTasks应该用于短操作(最多几秒钟)。如果您需要长时间保持线程运行,强烈建议您使用java.util.concurrent包提供的各种API。 例如Executor
,ThreadPoolExecutor
和 FutureTask
。
From Google的官方文档
Android设计模式—单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
Android设计模式--Builder模式
本文属于转载,看完之后,思考自己能否将Builder模式讲的如此简单清除,答案是不能,如果有侵权,联系后可以随时删除~
当我第一次使用Picasso的时候,看见下面的官网示例时,我和我的小伙伴都惊呆了!
1 | Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); |
如此简洁明了的使用方式,如此灵活多变的链式调用,让我深深地迷住了,然后我一直苦苦追求它,奈何天资愚笨,不知如何掀起它的神秘面纱,直到我在网上找到了这篇教程…
经过不懈的努力,终于发现它就是传说中的Builder(建造者)模式,并学会了如何与它亲密相处。
Android NDK开发Crash问题分析
目前市场上越来越多的 Android App采用 C/C++ 来实现其关键逻辑,尤其是很多第三方的SDK,出于效率、安全,复用的考虑,比如人脸识别,语音识别等等。所以能分析 C/C++ 崩溃日志并能从日志中分析出原因,成为 Android 开发人员一项必备技能。本文将通过一个简单的Demo分析 Native 崩溃日志来定位出错的 C/C++ 代码及出错原因。
Android Ninja实践
如果有自己编译过AOSP的源码,可能大家都会遇到这样的一个问题:
1 | ninja: error: '*******', needed by '*********', missing and no known rule to make it |
在刚刚开始接触AOSP的时候,我基本上都会直奔主题,大概清楚问题后,然后解决问题、重新编译,所以一直都没有注意到一个关键字:”Ninja”,今天我们就一起来学习/实践一下这个”熟悉的陌生人”,主要介绍一下目前Android的编译系统,以及以一个小Demo为例,实践一下Ninja的使用,如果想了解更多关于Ninja在AOSP中的使用,见参考链接。
Android自定义控件--属性篇
在Android开发的过程中,APP UI随着大众对于审美的变化总是在不断的演进,自定义 View 算是 Android 开发中常见的技巧之一,其实现主要包含两个部分:
- 定义
declare-styleable
中的自定义属性,并在构造函数中获得并初始化; - 实现
onMeasure
、onLayout
和onDraw
等方法。
本文我们主要记录一下关于自定义控件中的属性部分。
Kotlin Basic Syntax
最近在了解Android Jetpack相关的知识点,官方给出了很多建议的Project,大部分都是kotlin实现的,所以了解一下基本的kotlin语法,防止Read Source的时候卡住,记录一下,避免遗忘~
Android Handler的理解
Handler是Android给我们提供用来更新UI的一套机制,是一套消息处理机制,可以通过它来发送消息和处理消息。那作为开发者的我们,不禁会疑问?Google为什么要设计这套机制呢?这是为了解决在非UI线程中更新UI组件比较麻烦的问题。那么Android为什么不能在非UI线程中更新呢?首先Android的UI控件不是线程安全的,这是因为避免多线程并发所带来不安全问题。例如作一个假设,现在在子线程中刷新界面,同时也在UI线程中刷新界面,就会出现刷新不同步,简单来讲通过Handler就可以将更新UI操作切换到主线程中执行。