8 ShymanZhu

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 6w+

深入理解SharedPrefences实现原理

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

2020-04-19 18:03:48

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

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

2019-11-22 20:43:28

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

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

2019-11-22 20:07:27

Android架构组件(三)——ViewModel

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

2017-12-27 11:44:31

Android架构组件(二)——LiveData

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

2017-12-22 11:35:40

Android 架构组件(一)——Lifecycle

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

2017-12-22 11:25:38

如何正确的给ViewGroup设置OnClickListener

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

2016-11-05 10:18:59

ButterKnife 基本使用

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

2016-07-20 20:56:51

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

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

2016-06-25 23:38:33

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

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

2016-06-14 20:35:38

深入理解Java ThreadLocal

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

2016-05-29 20:11:52

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

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

2016-05-20 23:25:46

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

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

2016-05-10 23:36:21

设计模式——单例模式

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

2016-05-03 17:04:32

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

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

2016-04-27 17:30:13

设计模式——迭代器模式

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

2016-04-26 10:49:19

设计模式——观察者模式

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

2016-04-16 22:45:28

设计模式基础——UML类图

设计模式,UML关系图

2016-04-11 21:12:29

Android--MonkeyRunner的基本使用

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

2015-09-14 15:45:07

Textview 设置selector

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

2015-09-14 15:34:10

查看更多

勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。