android
文章平均质量分 94
ZhipengJuly
这个作者很懒,什么都没留下…
展开
-
PackageManagerService原理之启动篇
PackageManagerService属于Android framework中很重要的一个模块,应用安装、卸载、Intent的匹配、package的解析等都和它有关。下面从PackageManagerService的启动和在Context中获取PackageManager对象理一理整个过程。 本文是基于Android10源码分析,其他版本可能有细微的差异,但是总体流程相差无几。涉及到的类有:frameworks/base/services/java/com/android/server/Syst.原创 2022-02-28 22:00:00 · 2677 阅读 · 2 评论 -
Glide源码分析——资源加载和显示
在上一篇文章中讲到Glide是如何通过RequestManager来管理资源加载请求,这篇文章就来看下资源加载请求执行和资源加载完成后显示的具体过程《Glide源码分析——Request管理》《Glide源码分析——开篇》文章目录资源获取创建获取资源请求运行资源获取请求从内存缓存中获取图片资源从磁盘或者原始地址获取资源资源显示资源获取资源获取的整体流程如下:整个过程可概括为:创建RequestBuilder,然后根据要显示在的目标和配置创建获取资源的请求(Request)运行资源获取.原创 2022-01-12 20:37:08 · 1806 阅读 · 0 评论 -
Glide源码分析——Request管理
Glide作为一个优秀的图片加载框架,有很多值得我们学习的地方,这次我们来看看它是如何管理图片加载的请求吧;特别是它是如何感知Activity/Fragment的生命周期的方式。原创 2021-12-05 17:50:15 · 707 阅读 · 0 评论 -
Glide源码分析——开篇
Glide是一个很优秀的图片加载开源框架,它能做到一行代码就可以让图片资源显示出来,对使用者非常友好。对于这么优秀的一款开源库,有很多值得学习和借鉴的地方。这也是为什么已经有那么多关于Glide的文章,自己还要去研究它。这将是一个系列的文章,这属于第一篇,在这篇文章中主要介绍Glide的基本使用以及Glide对象的初始化。当然最重要的事,在这个过程中我们能学到什么,那么我们开始吧文章目录Glide 基本使用使用Glide对象使用GlideApp对象我们能从中学到什么Glide对象创建我们能从中学到什么.原创 2021-11-15 07:09:55 · 656 阅读 · 0 评论 -
一文读懂ActivityThread
ActivityThread是什么,是主线程吗?它是如何被创建的,以及它的作用又是什么呢?带着这些问题,我们一起来分析下ActivityThread。全文分为以下几个部分,大家可根据需求阅读文章目录ActivityThread是什么ActivityThread对象如何被创建的system_server进程App进程ActivityThread的作用进程ActivityServiceBroadcastReceiverContentProvider总结ActivityThread是什么Activit.原创 2021-10-21 20:57:59 · 5025 阅读 · 0 评论 -
ActivityManagerService启动与基本功能
ActivityManagerService作为Android系统中的重要的系统服务之一,我们有必要来了解下。这篇文章就跟大家一起分析下它的创建、启动过程以及它的基本作用。 如果大家看过前面的《Android App进程创建过程分析》、《Android Activity启动过程分析》两篇文章,想必对ActivityManagerService(后面我们简称AMS)不会陌生,进程创建和Activity启动都有涉及到AMS。但是AMS又不只这些功能,下面我们就来了解下它的创建、启动过程以及它的基本功能。.原创 2021-09-18 17:47:36 · 1430 阅读 · 0 评论 -
Android App进程创建过程分析
在分析Activity启动的文章《Android Activity启动过程分析》中,我们遗留了一个小尾巴——App冷启动的情况下,当时没有讲解进程创建的过程,现在我们就把这个尾巴接上,一起看看Android中App进程创建的过程(本文分析过程是基于Android Q源码)。 先给结论:在Android系统中创建App进程是由zygote进程负责创建的;在一个App种冷启动另一个App,首先会经由system_server进程种的ActivityManagerSrevice生成创建进程的请求,创建进程的.原创 2021-08-21 19:32:48 · 1884 阅读 · 4 评论 -
Android Activity启动过程分析
当我们在一个Activity中(或通过Context对象),调用startActivity()方法来启动另一个Activity的工程中发发生了什么呢?这就是本文想跟大家分享的内容,我们一起通过源码的方式来看下Activity的启动过程(本文是基于Android Q源码)。 启动Activity的流程大体分为两步:找到要启动的Activity;然后启动它。(虽说有点像如何把大象装进冰箱,但也确实是那么回事,只不过每个步骤有更多细节)找到Activity 要想启动一个Activity,系统先要找到这个.原创 2021-08-06 13:43:18 · 2798 阅读 · 0 评论 -
Activity UI显示流程分析
在鄙视链底端的客户端开发经常被调侃为“调UI的”、“切图boy”。调侃归调侃,我们该调的UI还得调,但是呢,我们不能止步于此。对于我们调的UI是怎么在Activity上显示,这个我们是不是该了解下呢? 在我们开发一个有交互的Android App时,我们第一步就是定义一个Activity,然后在Activity的onCreate()方法中调用setContentView()并传入布局文件,这就开始了我们调UI的第一步了。使用很简单,不过作为专业调UI的,我们是不是该想一想:布局文件是怎么显示在Acti.原创 2021-07-18 23:06:06 · 793 阅读 · 4 评论 -
Android混淆冲突正确解决姿势
Android混淆冲突解正确解决姿势背景 话说有一天,客户说用了你们混淆过的aar库,发现与别人的另一个库冲突了,都存在a.a.a.b.a类,让你赶紧修改,经过一顿面向搜索引擎编程,你发现通过自定义混淆字典可以解决问题,就像下面这样;其中class_dictionary.txt文件可能是这样的://package_dicitonary.txt# This obfuscation dictionary contains reserved Java keywords. They can't# be原创 2021-03-31 20:37:41 · 3016 阅读 · 0 评论 -
Android系统启动之SystemServer(二)
在前面的《Android系统启动之SystemServer(一)》的博客中,我们了解到SystemServer.main()方法是如何被调用的,至于在mai n()方法中又做了哪些事情并没有阐述说明,那么这篇博客我们就来了解下SystemServer.main()主要都做了啥。 SystemServer.main()方法主要完成了以下几项工作设置系统属性和初始化环境创建SystemServerManager对象,并添加到LocalService启动服务 我们先看下SystemServer.原创 2020-09-01 10:42:05 · 410 阅读 · 0 评论 -
Android系统启动之SystemServer(一)
在《Android系统启动之Zygote》的中,我们知道SystemServer进程(进程名为system_server)是由Zygote进程fork出来的,但当时并没有说明SystemServer.main()方法是怎样被调用的,说到这里不知道大家有没有想过一个问题,我们在写一个Android demo应用的时候,为什么都没见过main()方法,而在写一个java demo时就要实现main()方法。这个问题大家可以想一想,以后有机会再讲解。那么还是回归正题,这篇文章我们还是来了解下SystemServ.原创 2020-08-05 22:21:37 · 1134 阅读 · 0 评论 -
Android系统启动之Zygote
前段时间在看Android9.0的PackageManagerService的源码,看着看着就在想PackageManagerService是如何被启动的,发现它是被SystemServer启动的,然后就又想SystemServer又是怎么被创建的呢,就一步步跟代码,发现SystemServer是从zygote进程fork出来的,想把最近了解的内容总结下,于是就有了这篇文章(如果再跟下去你会发现zygote又是从init进程fork出来的)zygote 是什么简单地说,它是一个进程。如果稍微再详细点.原创 2020-07-31 22:36:51 · 541 阅读 · 0 评论 -
深入理解SharedPrefences实现原理
SharedPreferences作为Android常用的持久化组件,很常用,在系统设置应用中就大量地被使用。相信大家基本都是用过,但是在使用过程中,大家是否又知道它的实现原理呢?基本使用 SharedPreferences使用很简单,比如我们要它保存某个字符串,在Activity使用如下:/** * save number * @param num */private void...原创 2020-04-19 18:03:48 · 944 阅读 · 0 评论 -
Android 应用内存泄漏分析(实战篇)
在Android应用开发中,内存泄漏比较常见;如果应用越来越卡顿以致被系统杀掉,这个时候就可靠考虑分析下是否是内存泄漏导致的。在此分享内存泄漏分析的一种方式,主要是通过ADB、MAT工具分析,并简单描述内存泄漏的原因。工具使用 分析应用内存,首先查看应用内存使用情况,可以通过Android Studio Profiler 或者dumpsys meminfo 命令查看,然后再通过内存分析工...原创 2019-11-22 20:43:28 · 813 阅读 · 0 评论 -
Android内存泄漏原理及优化(原理篇)
Android内存泄漏原理及优化在Android开发中,内存泄漏是比较常见的,大多数开发者都知道有这么一回事,但是不清楚是什么原因会导致内存泄漏。在此就分享下自己的看法。 在讲内存泄漏之前,我们先了解下Java虚拟机内存模型和GC算法,这样我们能更好的理解后面说的几种情况为什么会导致内存泄漏。Java虚拟机内存模型在Java虚拟机规范中指明了Java虚拟机运行时的内存模型,如下图所示...原创 2019-11-22 20:07:27 · 905 阅读 · 0 评论 -
android学习——GridView实现主界面布局
GridView(网格视图),用于在界面上按行、列分布的方式显示多个组件。GridView和ListView有相同的父类,因此他们具有相似的特性。他们的主要区别在于:ListView是在一个方向上分布;而GridView 是在两个方向上分布。 GridView提供的常用XML属性如下:XML属性说明android:columnWidth原创 2014-03-12 17:26:06 · 4409 阅读 · 0 评论