自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sd_zhuzhipeng的专栏

记录学习中的点滴

  • 博客(49)
  • 资源 (3)
  • 收藏
  • 关注

原创 还在用Java Date,新姿势了解下?

从JDK1.8开始,Java提供了java.time包,该包用于描述ISO日历系统中的日期和时间。通过该包下的类可以实现分别访问日期、时间和时间戳等对象。 不像java.util.Date, 一个类包含日期和时间所有信息。比如你可以使用LocalDate对象来表示日期,使用LocalTime对象表示时间,用LoalDateTime对象表示日期时间。文章目录概述LocalDate常见方法now()ofxxx()运算格式化其他LocalTime常见方法now()ofxxx()运算格式化LcalDateTi.

2022-03-31 19:15:00 372

原创 PackageManagerService原理之启动篇

PackageManagerService属于Android framework中很重要的一个模块,应用安装、卸载、Intent的匹配、package的解析等都和它有关。下面从PackageManagerService的启动和在Context中获取PackageManager对象理一理整个过程。 本文是基于Android10源码分析,其他版本可能有细微的差异,但是总体流程相差无几。涉及到的类有:frameworks/base/services/java/com/android/server/Syst.

2022-02-28 22:00:00 2670 2

原创 Glide源码分析——资源加载和显示

在上一篇文章中讲到Glide是如何通过RequestManager来管理资源加载请求,这篇文章就来看下资源加载请求执行和资源加载完成后显示的具体过程《Glide源码分析——Request管理》《Glide源码分析——开篇》文章目录资源获取创建获取资源请求运行资源获取请求从内存缓存中获取图片资源从磁盘或者原始地址获取资源资源显示资源获取资源获取的整体流程如下:整个过程可概括为:创建RequestBuilder,然后根据要显示在的目标和配置创建获取资源的请求(Request)运行资源获取.

2022-01-12 20:37:08 1802

原创 Glide源码分析——Request管理

Glide作为一个优秀的图片加载框架,有很多值得我们学习的地方,这次我们来看看它是如何管理图片加载的请求吧;特别是它是如何感知Activity/Fragment的生命周期的方式。

2021-12-05 17:50:15 705

原创 Glide源码分析——开篇

Glide是一个很优秀的图片加载开源框架,它能做到一行代码就可以让图片资源显示出来,对使用者非常友好。对于这么优秀的一款开源库,有很多值得学习和借鉴的地方。这也是为什么已经有那么多关于Glide的文章,自己还要去研究它。这将是一个系列的文章,这属于第一篇,在这篇文章中主要介绍Glide的基本使用以及Glide对象的初始化。当然最重要的事,在这个过程中我们能学到什么,那么我们开始吧文章目录Glide 基本使用使用Glide对象使用GlideApp对象我们能从中学到什么Glide对象创建我们能从中学到什么.

2021-11-15 07:09:55 652

原创 一文读懂ActivityThread

ActivityThread是什么,是主线程吗?它是如何被创建的,以及它的作用又是什么呢?带着这些问题,我们一起来分析下ActivityThread。全文分为以下几个部分,大家可根据需求阅读文章目录ActivityThread是什么ActivityThread对象如何被创建的system_server进程App进程ActivityThread的作用进程ActivityServiceBroadcastReceiverContentProvider总结ActivityThread是什么Activit.

2021-10-21 20:57:59 4973

原创 ActivityManagerService启动与基本功能

ActivityManagerService作为Android系统中的重要的系统服务之一,我们有必要来了解下。这篇文章就跟大家一起分析下它的创建、启动过程以及它的基本作用。 如果大家看过前面的《Android App进程创建过程分析》、《Android Activity启动过程分析》两篇文章,想必对ActivityManagerService(后面我们简称AMS)不会陌生,进程创建和Activity启动都有涉及到AMS。但是AMS又不只这些功能,下面我们就来了解下它的创建、启动过程以及它的基本功能。.

2021-09-18 17:47:36 1424

原创 Android App进程创建过程分析

在分析Activity启动的文章《Android Activity启动过程分析》中,我们遗留了一个小尾巴——App冷启动的情况下,当时没有讲解进程创建的过程,现在我们就把这个尾巴接上,一起看看Android中App进程创建的过程(本文分析过程是基于Android Q源码)。 先给结论:在Android系统中创建App进程是由zygote进程负责创建的;在一个App种冷启动另一个App,首先会经由system_server进程种的ActivityManagerSrevice生成创建进程的请求,创建进程的.

2021-08-21 19:32:48 1878 4

原创 Android Activity启动过程分析

当我们在一个Activity中(或通过Context对象),调用startActivity()方法来启动另一个Activity的工程中发发生了什么呢?这就是本文想跟大家分享的内容,我们一起通过源码的方式来看下Activity的启动过程(本文是基于Android Q源码)。 启动Activity的流程大体分为两步:找到要启动的Activity;然后启动它。(虽说有点像如何把大象装进冰箱,但也确实是那么回事,只不过每个步骤有更多细节)找到Activity 要想启动一个Activity,系统先要找到这个.

2021-08-06 13:43:18 2785

原创 Activity UI显示流程分析

在鄙视链底端的客户端开发经常被调侃为“调UI的”、“切图boy”。调侃归调侃,我们该调的UI还得调,但是呢,我们不能止步于此。对于我们调的UI是怎么在Activity上显示,这个我们是不是该了解下呢? 在我们开发一个有交互的Android App时,我们第一步就是定义一个Activity,然后在Activity的onCreate()方法中调用setContentView()并传入布局文件,这就开始了我们调UI的第一步了。使用很简单,不过作为专业调UI的,我们是不是该想一想:布局文件是怎么显示在Acti.

2021-07-18 23:06:06 787 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 3006

原创 Android系统启动之SystemServer(二)

在前面的《Android系统启动之SystemServer(一)》的博客中,我们了解到SystemServer.main()方法是如何被调用的,至于在mai n()方法中又做了哪些事情并没有阐述说明,那么这篇博客我们就来了解下SystemServer.main()主要都做了啥。 SystemServer.main()方法主要完成了以下几项工作设置系统属性和初始化环境创建SystemServerManager对象,并添加到LocalService启动服务  我们先看下SystemServer.

2020-09-01 10:42:05 406

原创 Android系统启动之SystemServer(一)

在《Android系统启动之Zygote》的中,我们知道SystemServer进程(进程名为system_server)是由Zygote进程fork出来的,但当时并没有说明SystemServer.main()方法是怎样被调用的,说到这里不知道大家有没有想过一个问题,我们在写一个Android demo应用的时候,为什么都没见过main()方法,而在写一个java demo时就要实现main()方法。这个问题大家可以想一想,以后有机会再讲解。那么还是回归正题,这篇文章我们还是来了解下SystemServ.

2020-08-05 22:21:37 1130

原创 Android系统启动之Zygote

前段时间在看Android9.0的PackageManagerService的源码,看着看着就在想PackageManagerService是如何被启动的,发现它是被SystemServer启动的,然后就又想SystemServer又是怎么被创建的呢,就一步步跟代码,发现SystemServer是从zygote进程fork出来的,想把最近了解的内容总结下,于是就有了这篇文章(如果再跟下去你会发现zygote又是从init进程fork出来的)zygote 是什么简单地说,它是一个进程。如果稍微再详细点.

2020-07-31 22:36:51 537

原创 深入理解SharedPrefences实现原理

SharedPreferences作为Android常用的持久化组件,很常用,在系统设置应用中就大量地被使用。相信大家基本都是用过,但是在使用过程中,大家是否又知道它的实现原理呢?基本使用 SharedPreferences使用很简单,比如我们要它保存某个字符串,在Activity使用如下:/** * save number * @param num */private void...

2020-04-19 18:03:48 940

原创 Android 应用内存泄漏分析(实战篇)

 在Android应用开发中,内存泄漏比较常见;如果应用越来越卡顿以致被系统杀掉,这个时候就可靠考虑分析下是否是内存泄漏导致的。在此分享内存泄漏分析的一种方式,主要是通过ADB、MAT工具分析,并简单描述内存泄漏的原因。工具使用 分析应用内存,首先查看应用内存使用情况,可以通过Android Studio Profiler 或者dumpsys meminfo 命令查看,然后再通过内存分析工...

2019-11-22 20:43:28 806

原创 Android内存泄漏原理及优化(原理篇)

Android内存泄漏原理及优化在Android开发中,内存泄漏是比较常见的,大多数开发者都知道有这么一回事,但是不清楚是什么原因会导致内存泄漏。在此就分享下自己的看法。 在讲内存泄漏之前,我们先了解下Java虚拟机内存模型和GC算法,这样我们能更好的理解后面说的几种情况为什么会导致内存泄漏。Java虚拟机内存模型在Java虚拟机规范中指明了Java虚拟机运行时的内存模型,如下图所示...

2019-11-22 20:07:27 901

原创 Android架构组件(三)——ViewModel

Android架构组件(三)——ViewModel 上一篇文章讲到了Android架构组件之LiveData(Android架构组件(二)——LiveData),现在我们再来看看另一个成员ViewModel。ViewModel是什么? ViewModel,从字面上理解的话,我们也能想到它肯定是跟视图(View)以及数据(Model)相关的。正像它字面意思一样,它是负责准备和管

2017-12-27 11:44:31 22134 9

原创 Android架构组件(二)——LiveData

Android架构组件(二)——LiveData 上一篇文章讲到了Android架构组件之一Lifecycle组件(Android 架构组件(一)——Lifecycle-Aware Components),现在我们再来看看另一个成员LiveData。定义 简单地说,LiveData是一个数据持有类。它具有以下特点:数据可以被观察者订阅;能够感知组件(Fragment、

2017-12-22 11:35:40 27391 7

原创 Android 架构组件(一)——Lifecycle

Android 架构组件(一)——Lifecycle-Aware Components 有一天“谷歌开发者”官微推送了《正式发布 Android 架构组件 1.0 稳定版 | 附带中文介绍视频》,发现这种架构足够秒杀MVP、MVVM,虽然之前的Google I/O大会中也介绍过,但是这次推出是稳定版,而且是可以投入到生产中去。于是就顺着这篇去官网看了使用文档——《Guide to App

2017-12-22 11:25:38 31471 15

原创 如何正确的给ViewGroup设置OnClickListener

在Android的日常开发中,我们总会碰到要给某个LinearLayout、RelativeLayout等设置OnClickListener,以便达到点击其子view能够触发设置的OnClickListener。但是当我们点击子view的时候,对应的Listener并没有触发到,这是为什么呢,接下来我们将结合例子从源码角度去解释它。实例  我们从一个简单的需求出发:有一个Button和一个Text

2016-11-05 10:18:59 3615

原创 ButterKnife 基本使用

ButterKnife 基本使用导语 在Android的日常开发中,最烦的应该是写一大堆的findViewById()了,偏偏这个还不得不写。总想让工具来解放我们的双手,能有多懒就尽量有多懒,最好能实现人脑和电脑之间通过脑电波传输,然后啪啪啪代码就写好了(或许若干年之后可以实现吧)。有一位叫Jake Wharton打大神就带领我们迈进了一步,再也不用写findViewById()了(666666

2016-07-20 20:56:51 754

原创 深入理解Android 消息机制(一)——综述

在日常开发和学习中,我们肯定都会接触到Android消息机制。我们知道,在非UI线程中不能直接更新UI,一般我们都是在非UI线程中通过Handler发送一条消息来更新UI。通过Handler可以将任务切换到Handler所在的线程中。Android消息机制主要是指Handler的运行机制,Handler的运行需要和MessageQueue和Looper配合才能完成。可能有人会问:我在Activity

2016-06-25 23:38:33 756

原创 Android Studio导入framework.jar等系统jar包方式

从Eclipse 转到Android Studio,必经 的一个过程就是导入第三方jar包,导入普通的jar包方式比较简单,网上其他的例子也比较多,但是关于导入framework.jar包内容就比较少。 有时候开发需要一些依赖framework中隐藏方法的时候,我们可以导入framework.jar, 编译的时候依赖framework, 打包的时候不打进去,这在eclipse中实现方式比较简单,这里

2016-06-14 20:35:38 30811 32

原创 深入理解Java ThreadLocal

欢迎转载,转载请注明出处:深入理解Java ThreadLocal!一、定义我们知道多线程环境下访问共享资源的会产生冲突,一般情况下我们可以通过锁机制来限定单个线程访问共享资源,让其他线程等待,但是这种方式会导致阻塞。避免多线程对共享资源访问产生的冲突的根本解决方式就是不共享。Java提供了一种叫做ThreadLocal类,我们称它为线程本地存储,从名称上我们就能看出它不是线程,而是一个存储变量的类

2016-05-29 20:11:52 576

原创 Java 引用分类:StrongReference、SoftReference、WeakReference、PhantomReference

一,定义在Java中,引用的定义是:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。后面在JDK1.2开始,引用的概念被扩充,引用被分为强引用(StrongReference)、软引用(SoftReference)弱引用、(WeakReference)、虚引用(PhantomReference)。这四种引用的强度关系:强引用>软引用>弱引用>虚引

2016-05-20 23:25:46 616

原创 带你深入理解Activity启动模式(LaunchMode)

我们知道默认情况下,当我们多次启动同一个activity时,系统会创建多个实例并把他们一个个放入任务栈,当我们按back键,这些activity又会一个个退出。在讲activity的launchmode之前,我们有必要了解下“任务栈(Task Stack)”这个概念。在Android中是使用任务(Task)来管理Activity的,任务就是存放在栈里面的Activity的集合,这个栈就是称为任务栈。

2016-05-10 23:36:21 15380 4

原创 设计模式——单例模式

上次我们讲到迭代器模式(设计模式——迭代器模式),这次我们来看一个最常用的设计模式——单例模式。单例模式的使用场景很多,比如处理偏好和设置注册表对象、日志对象、对话框等。单例模式是应用最广的设计模式之一,也是很多同学最熟悉的模式,因为它使用简单,很好理解,在一般情况下使用都不会出什么问题。但是如果深入去理解的话,还是会发现有些平时没注意到的问题的,下面就一起学习下巩固下吧。一、定义单例模式:确保一个

2016-05-03 17:04:32 602 1

原创 Java集合ArrayList实现原理——源码分析

一,ArrayList简述     ArrayList是实现了List接口的动态数组,动态数组是指它的大小是可变的。ArrayList实现了所有可选列表操作,并允许保存包括null在内的所有元素。ArrayList除了实现List接口,还提供了操作是内部用来存储列表的数组的大小的方法。     每个ArrayList实例都有一个容量(capacity),该容量是用来表示存储元素的数

2016-04-27 17:30:13 701

原创 设计模式——迭代器模式

上次我们讲了下观察者模式《设计模式——观察者模式》,这次我们来看下迭代器模式。迭代器模式我们自己可能很少直接的使用,但是我们却经常在间接地使用,Java集合类就用到了这个模式,这个可以通过他们的源码来验证。 我们知道对容器对象的访问必然会涉及到遍历操作,一般情况下,我们的做法是将遍历的方法封装在容器中,但是这样会带来新的问题:容器类不仅要维护自身内部的数据元素,还要对外提供遍历的接口方法,这样不但

2016-04-26 10:49:19 435

原创 设计模式——观察者模式

观察者模式是一种非常常见的模式,它最常用在GUI系统和订阅发布系统。像Android系统中的View的各种listener用到的就是观察者模式。使用观察者模式一个重要的原因就是解耦,将被观察者和观察者之间解耦,使得他们之间的依赖减小。一,定义: 观察者模式是定义一种一对多的依赖关系,使得当一个对象状态改变时,所有依赖于它的对象都会受到通知,然后依赖于它的对象可以根据需求去做相应的操作。二

2016-04-16 22:45:28 536 1

原创 设计模式基础——UML类图

设计模式,UML关系图

2016-04-11 21:12:29 1446 1

原创 Android--MonkeyRunner的基本使用

先说下背景:DQA总会测出一些难以重现的bug,经常出现“有时出现”、“偶尔出现”等字眼,这种问题真是一万个草泥马跑过啊.....。你不能逮着DQA的人问怎么出现的啊,如何才能出现,一般情况下你得到的回答都是“它就是出现了.....”。好吧,我也不想就那么傻傻的在屏幕上点啊点啊点的,这还不如炒我鱿鱼呢,这种机械的重复的事情应该要从我们这苦逼的程序员手中解除才对。不扯淡了,直入主题:

2015-09-14 15:45:07 1720

原创 Textview 设置selector

先说下要求:碰到一个问题就是如何实现当按下TextView的时候字体能变颜色,松开之后又能恢复原来的颜色。自己开始想到的方法是设置TextView的onTouchListener,当按下时改变字体的颜色,松开时还原自己的颜色。虽然这种方法可以实现我的需求,但是这样代码似乎写的有点臃肿。后面又找到一种新的方法,在这里记录同时分享下:     1,在res/color 文件夹中建立te

2015-09-14 15:34:10 5038

原创 Android SharedPreferencs基本使用

SharedPreferences是一种轻量级的数据存储方式,它存储的内容是以键值对方式存储的,类似于map,但是它只能保存基本的数据类型(booleans, floats, ints, longs, and strings)。SharedPreferences提供的是一种持久化数据保存数据的方式。     得到SharedPreferences对象有两种方法:     1,public

2015-03-01 20:20:14 979

原创 ListPreference 基本使用

ListPreference的定义:     ListPreference        android:dialogTitle= "@string/machine_type_number"        android:key= "machine_type_number"        android:entries= "array/entries_color

2014-12-04 22:48:50 3358

原创 高亮listView的选中的item

1,首先设置ListView的selector,定义该selector.2,在选中ListView 的item项时高亮该item.具体实现方法(以设置应用的heard为例):     1,设置selector,getListView().setSelector(R.drawable. header_list_selector );.定义selector:

2014-11-26 23:18:51 970

原创 修改系统action bar字体大小、粗细、颜色等样式的方法

Action bar字体的修改主要还是在xml文件中完成,对actionbar字体的修改主要思路如下:根据application 的android:theme 属性找到他的style(方便起见,我们成为app_style)定义。在style中找到name 为android:actionBarStyle 的item,找到android:actionBarStyle 对应的style(方便

2014-11-13 21:34:59 6665 1

原创 Fragment之间的切换

背景和要求:在一个FragmentA中设置一个View的监听,当这个view被点击时,就进入FragmentB,然后当点击FragmentB中的某个view的时候要重新返回到FragmentA中。这个就是类似于网易云音乐的切换歌词显示的效果。     首先有一个MusicPlayFragment类,该类继承了抽象类AbsMusicPlayFragment,他主要完成音乐播放的一些逻辑,因为主要

2014-07-05 20:11:13 1395 2

原创 单例模式简介及由它引出的JAVA局部静态变量问题

单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供实例。单例模式类的特点:只能有一个实例;自己创建这个实例;整个系统都使用这个实例。先看一般的单例模式类,类名为SingletonClass,定义如下:

2014-07-05 20:02:06 1802

proguard.zip

自定义混淆字典

2021-03-31

thinkpython

thinkpython经典之作,适合初学者,想学习python的朋友可以作为参考

2013-08-19

腾讯笔试题

腾讯笔试题,考得不是很难,但是覆盖的反面比较广,数据结构,算法,计算机网络,C、C++等都有涉及

2013-04-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除