Android筑基
文章平均质量分 89
记忆之城、
Android开发之路点滴
展开
-
解读Android中View的事件分发机制
事件分发的顺序Activity->Window->DecorView->ViewGroup->View事件的类型ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL通常一个事件序列是这样的ACTION_DOWN 事件是一个事件的起点,然后伴随着多个ACTION_DOWN事件,然后是ACTION_DOWN,中间可能会收到一个ACTION_DOWN事件Activity的事件分发// Activity的dispatchTouchEven原创 2021-10-12 17:45:55 · 237 阅读 · 0 评论 -
Android Binder通信机制
Android为什么采用Binder作为IPC机制?Android系统内核基于Linux内核,Linux现有的进程通信方式如下:管道:在创建时分配一个page大小的内存,缓存区大小比较有限;消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;套接字:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;信号量:常作为一种锁机制,防止某进程原创 2020-12-29 10:48:33 · 225 阅读 · 0 评论 -
Activity的任务栈和四大启动模式
前言在安卓系统中默认每次启动一个Activity时,系统会创建一个实例,并按照先进后出的原则放入任务栈中,当我们按back键时,就会有一个activity从任务栈顶移除,重复下去,直到任务栈为空,系统就会回收这个任务栈。但是这样以来,系统多次启动同一个Activity时就会重复创建多个实例,这种做法显然不合理,为了能够优化这个问题,Android提供四种启动模式来修改系统这一默认行为。任务栈任务栈是一个Android应用中所有Activity的集合,安卓系统使用栈的方式来管理其中的Activity,这原创 2020-08-16 10:21:12 · 932 阅读 · 0 评论 -
Android应用崩溃重启以及被系统Kill场景分析
Android应用崩溃重启Android应用开发过程中,当我们的应用发生Crash时异常退出,然后又自动启动跳转到未知页面,此时应用在崩溃前保存的全局变量被重置,用户状态丢失,显示数据错乱。不同场景表现的现象经测试,在 Android 的 API 21 ( Android 5.0 ) 以下,Crash 会直接退出应用,但是在 API 21 ( Android 5.0 ) 以上,系统会遵循以下原则进行重启:包含Service,如果应用Crash的时候,运行着Service,那么系统会重新启动Serv原创 2020-08-10 21:29:45 · 3525 阅读 · 0 评论 -
Android中类加载机制解析
Android中的ClassLoaderJava中的ClassLoader是加载class文件,而Android中的虚拟机无论是dvm还是art都只能识别dex文件。因此Java中的ClassLoader在Android中不适用。Android中的java.lang.ClassLoader这个类也不同于Java中的java.lang.ClassLoader。Android中的ClassLoader类型也可分为系统ClassLoader和自定义ClassLoader。其中系统ClassLoader包括3种原创 2020-07-03 23:34:24 · 434 阅读 · 0 评论 -
Android中SharedPreferences源码解析与性能优化
SP XML文件与SharedPreferences对象关系解读data/data/packagename/shared_prefs 中的xml文件,以下简称sp文件ContextIml对象中通过Map集合缓存了多个SharedPreference对象,该Map集合是全局的,key对应shared_prefs文件名,value对应SharedPreferenceImpl(SharedPreferences接口的实现类)对象。因此,shared_prefs文件与内存中的SharedPreferencesI原创 2020-06-30 13:37:42 · 389 阅读 · 0 评论 -
MQTT源码分析
MQTT介绍MQTT是个轻量级的消息订阅/发布协议,基于TCP协议,在物联网中应用较广,当然也有的公司拿MQTT协议来做Push或IM。MQTT协议有很多客户端/服务端的实现,如Eclipse Paho就是其中一个。本文不对MQTT协议本身做介绍,而是主要分析下一个Paho MQTT客户端的代码实现。Paho MQTT开源项目基本使用发布端代码案例/** *发布端 */public class PublishSample { public static void main(Str原创 2020-06-24 14:06:34 · 1944 阅读 · 0 评论 -
Android中的IntentService解析
IntentService简介IntentService是继承与Service的。所以IntentService也是一个Service,拥有Service的所有特性。public abstract class IntentService extends ServiceIntentService相比于Service有什么区别呢?IntentService可以执行一些耗时任务,并且任务完成后会服务会自动销毁。具体的源码分析如下://IntentService onCreate()方法public v原创 2020-06-22 10:44:13 · 229 阅读 · 0 评论 -
Android中的HandlerThread分析
HandlerThread简介HandlerThread,顾名思义,是一个在其内部可以使用Handler的线程,其实本质是HandlerThread线程内部构造了一个Looper环境。源码如下:在其run方法中初始化了一个Looper的环境,创建了Looper对象并且开启了loop循环。//HandlerThread run()方法@Override public void run() { mTid = Process.myTid(); Looper.prepa原创 2020-06-19 10:18:57 · 421 阅读 · 0 评论 -
Android APK体积优化
随着Android移动开发的需求越来越复杂,我们不可避免的遇到发布出去的apk体积越来越大的问题, 目前超过10MB、20MB的apk已经是很常见的事情了,但是依然能够看到一些apk的体积控制的很小。apk体积增大源于:新需求不断的提出需要支持高分辨率的屏幕而加入了高分图片依赖了更多的第三方库本文将从我自己的经历项目中探讨如何有效减小apk的体积。减小Apk体积是一件很有用处的and...原创 2018-09-03 22:05:28 · 851 阅读 · 0 评论 -
Android架构组件 Lifecycle
概述每个Android开发者都应该面对过生命周期问题,即操作系统启动、停止和销毁Activity。这意味着开发者需要根据生命周期的不同阶段,有针对性地管理组件状态,比如用于更新用户界面的可观察对象。生命周期管理(Lifecycles)帮助开发者创建“可感知生命周期的”组件,让其自己管理自己的生命周期,从而 减少内存泄露和崩溃的可能性。生命周期库是其他架构组件(如 LiveData)的基础。...原创 2018-08-26 13:31:40 · 397 阅读 · 0 评论 -
Android中如何优雅的定义常量
在Android开发中如何更好的定义常量本篇博客是笔者的第一篇博客,其实很早之前就有了写博客的想法,但是奈何万事开头难,一直没有下定决心,随着自己经验的增加,有些知识会经常遗忘,对于某些难题,可能当时有了解决方案,但是如果不做笔记,不做记录,过不了多久就会遗忘,笔者深有体会。这会大大降低我们的工作效率,所以笔者下定决心,坚持写博客,通过博客来记录自己平时的知识积累,通过博客也让自己的知识能够分...原创 2018-08-04 11:26:17 · 12368 阅读 · 3 评论 -
你真的会用Handler?
前言Handler消息机制是Android中提供的一种线程间通信机制,说到线程间通信,懂Java的我们都知道可以通过等待唤醒机制(wait/notify)实现线程间通信,但是这种机制会产生锁的竞争、线程的阻塞。响应不是很快,所以google的大佬们自己开发出一套线程间通信机制-Handler消息机制。Handler消息机制符合生产者消费者模型,有以下几个角色组成。Looper、MessageQueue、Message、HandlerHandler整体工作流程简要概述下Handler消息机制的整体运作原创 2020-10-30 13:52:42 · 263 阅读 · 0 评论 -
管理Android应用程序的资源
管理Android应用程序的资源什么是资源Android应用程序由两部分组成,功能部分(代码指令)和数据部分(资源)功能部分是决定你应用程序行为的代码,包括程序运行的任何算法,资源包括了文本字符串、样式和主题、尺寸、图片和图标、音频文件、视频以及应用使用的其他数据存储应用程序资源Android的资源文件不同于.java类。是分开存在Android项目内,所有的资源必须存放在项目的/res目录下的特定子目录下,其目录名必须是小写。不同的资源存放在不同的目录中,当创建一个Android项目时,生原创 2020-08-05 22:55:06 · 242 阅读 · 0 评论