Android开发——Java基础
文章平均质量分 95
基础是个好东西,妈妈再也不用担心我看源码一脸懵逼了。
小草帽学编程
落魄Android,在线炒饭
展开
-
Android性能优化之内存优化浅析
一、背景Android由于是以Java语言为主要开发语言,所以它的内存管理并不像C语言那样由开发者去管理内存的分配以及回收等,而是交由JVM虚拟机的内存回收机制去处理。这就导致我们在开发过程中难免会遇到内存相关的各种问题带来的困扰。而这些问题的根源就在于我们对Android的内存管理机制的不够了解,以及开发过程中缺少对内存的关注导致。所以这里借这篇文章我们再回顾一下Android的内存管理机制,以及如何在开发过程中去尽量避免这些内存问题。二、内存管理—内存划分Android中的内...原创 2022-02-03 15:41:43 · 2483 阅读 · 0 评论 -
进程保活与拉活——APP黑科技,永生不死!
我相信很多开发朋友都像我一样遇到过这样的需求,尤其是开发过IM对实时性要求比较高的朋友。一定遇到过老板或者产品经理发出来的要求我们做到像微信,钉钉等等这些大厂应用一样保持应用一直保活,能够实时接收到推送或者消息的功能需求。然后了解情况的人其实都知道,Android系统现在每个版本升级在应用保活这块已经被限制的很死了,6.0以前的那一套保活方法已经基本失效了。目的就是降低系统功耗,降低安全风险,避免流氓软件。但是产品经理可不管这些,他们的要求是:微信有的我也要有,微信能做出来我也要,至于如何去实现我管不着,但原创 2020-09-03 22:56:39 · 3791 阅读 · 0 评论 -
通过AIDL看Binder
上一章我们简单的了解了一下Binder的知识,但是日常开发中我们最容易接触到的关于Binder相关的就数Aidl开发最多了,于是每次做Aidl开发的时候我们都需要打开百度,一顿操作,一顿CV。最后程序一执行还是不停报错,或者勉强完成了这次的小功能,下次来个新功能,又要重复上述操作。究其根本原因就是我们只是为了完成任务,却没有去真正的弄明白Aidl开发是个怎么回事,没有弄明白它的基本原理是什么。本人...原创 2019-10-24 17:22:34 · 260 阅读 · 0 评论 -
注解——基本使用和原理
直到写这篇博客之前,其实我和很多同学都一样,听过注解,看过别人用注解,第三方框架到处都是注解。然而如果有人问我注解是什么,怎么用,用来干嘛的。我只能恨不得摇断脖子,就更加不用说能在工作中使用注解了,想研究像EventBus等第三方框架时,一遇到注解前功尽弃。所以说到底还是底子差,不懂注解的程序员成不了好的架构师。二话不说学吧。一、注解的定义和使用(1)注解概念定义这里就不贴官方的定义了...原创 2019-08-05 16:59:23 · 472 阅读 · 0 评论 -
Android中的序列化方案
一、Serializable接口Serializable是 Java 提供的序列化接口,它是一个空接口,里面什么都没有,那么这个序列化和反序列化的工作的细节最后是谁来完成的呢?答案是:Serializable默认由JVM来完成这些工作,可以理解成Serializable 接口只是一个提供给JVM识别的标识接口。public interface Serializable {}Seria...原创 2019-08-23 16:41:26 · 384 阅读 · 0 评论 -
注解——dagger的使用和原理
一、什么叫依赖和依赖倒置依赖是类与类之间的连接,依赖关系表示一个类依赖于另一个类的定义,通俗来讲就是一种需要。依赖倒置是面向对象设计领域的一种软件设计原则。这里就要逐一讲一下,软件设计的 6 大设计原则,合称 SOLID1、单一职责原则(Single Responsibility Principle,简称SRP )核心思想: 应该有且仅有一个原因引起类的变更,啥意思呢?就是说一个类...原创 2019-08-14 22:23:59 · 637 阅读 · 0 评论 -
Java序列化基础
一、背景我们做软件开发的应该知道,系统将内存分为用户空间和内核空间。内核空间能够与所有用户空间进行直接通信,而用户空间与用户空间之间是无法进行直接通信。于是为了用户空间与用户空间之间通信,进程间通信技术(IPC)应运而生了。但是系统底层只认识字节序列,而Java是面向对象的,于是序列化与反序列化成了解决方案。二、序列化定义由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层...原创 2019-08-23 14:41:29 · 190 阅读 · 0 评论 -
如何应对Java的IO面试
可能很多朋友都和我一样,觉得IO不就输入输出流,读写操作吗?有什么好讲好写的?会用就行啦。但是现实却往往会给我们一个响亮的大耳光,往往在开发中我们会突然发现:妈的,IO是个什么鬼,我要怎么用?他能干什么?还有就是Java里面那么多IO类我要用哪一个?或者在参加面试的时候会被面试官劈头盖脸一顿骂:Java IO都没搞清楚你还敢说自己是做Android开发的?还敢说自己精通Android开发?还敢要这...原创 2019-09-17 15:49:26 · 300 阅读 · 0 评论 -
IO实战一:Apk加解密
背景为什么要进行apk加密?答案是避免apk被有心人反编译,窃取公司重要技术和算法等。但是要给Apk加密要如何实现呢?首先我们需要知道Android整个Apk的打包流程,然后将加密的环节插入要其中的步骤中,加密完成后apk安装后要如何解密,这时候我们又要了解应用安装时apk是如何被加载运行。这一系列的问题都需要我们除了掌握IO知识外还要掌握如:类加载、热修复、反射、hook等知识。这里我们将借...原创 2019-09-20 16:19:49 · 3180 阅读 · 1 评论 -
一问就懵逼的Binder(一)
一、为什么要用Binder机制Android系统为每个应用在分配进程的时候都是有内存限制如现在常见的64M啊等等。同时很多应用为了避免自己的核心业务被系统杀死,这个时候就需要将核心业务运行在单独的进程中,且各个进程组成一个守护进程来达到保活和唤醒的功能。于是这个时候就要用到进程间通信了,而进程间通信的方式又很多种,如在C语言中我们常说的socket、共享内存、管道、信号量等等。在Android...原创 2019-09-30 14:42:31 · 557 阅读 · 0 评论 -
函数式编程概念-Lambda表达式
一、函数式编程概念面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并存,程序也是如此,因此这两种编程方式我们都得学,而学好这些编程思想并不是一天两天的事情。我们首先要关心的是如何应用现有知识写出质量更高的代码。而写好写出高质量的代码就又需要我们不断的更新自己的知识面,跟上新技术的节奏。前面我们在学RxJava的时候就常用到类似下面这种写法。RxView....原创 2019-07-28 22:10:37 · 306 阅读 · 0 评论 -
RxJava(二)——原理与源码
RxJava除了要知道它的核心思想和基本概念我们还应该弄明白什么呢?必然是原理级别的啦,为什么RxJava可以使用链式调用,在源码中这个链式调用是怎么体现的?RxJava是如何实现线程切换的,以及为什么设置线程规则时subscribeOn只有第一次设置生效,而observeOn可以设置多次生效?RxJava2中的背压策略是什么?这些问题都是本章我们需要一一去研究弄明白的知识点。一、RxJava...原创 2019-07-14 21:05:31 · 303 阅读 · 0 评论 -
RxJava(一)——基础
背景:RxJava是目前最火的响应式编程框架之一。目前已经更新到RxJava2.0版本,我们平时在开发过程中遇到最多和使用最多的一种第三方框架,因为它使用起来方便快捷、成本低。而且现在有很多其他第三方框架都是基于RxJava来实现的,如Android 6.0之后的动态权限申请框架RxPermission。所以学习使用RxJava是迫在眉睫的事情,但是光会使用还不行,因为面试官要的永远不是你会使...原创 2019-07-14 20:47:24 · 346 阅读 · 0 评论 -
泛型类
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。注意,这也是他的特点,在编译期就能够进行类型检测,而不是运行时进行检测。我们通常写一个方法时都会有形参,当调用方法时传入具体的实参。但这种情况参数的类型是固定的。也就是说这个方法只能传固定类型的实参。但是在开发中很多时候或者设计框架的时候我们都不知...原创 2019-05-11 19:13:12 · 1236 阅读 · 0 评论 -
泛型接口
前面泛型类我们详细的讲解了什么是泛型类以及泛型类的使用。但是大家都知道,Java中除了类还有接口。那么泛型也不例外,泛型同样有接口,那么泛型接口是什么呢、泛型接口如何定义呢以及泛型接口有什么作用呢?我们再次带着这些问题来讲解泛型的第二篇章:泛型接口一、泛型接口如何定义泛型接口的定义和泛型类的定义一样,区别就在于一个是接口需要实现各个接口方法,一个是类,需要实现对应的抽象方法。/**...原创 2019-05-11 20:24:14 · 3152 阅读 · 0 评论 -
泛型方法
前面两章我们介绍了泛型类和泛型接口,这篇我们来讲解一下什么是泛型方法,其实在讲泛型类的时候我们已经有提到过泛型方法,只是没有去细说。那么什么又是泛型方法呢?泛型方法如何定义?泛型方法和普通方法有什么区别呢?一、怎么定义一个泛型方法首先我们来讲一下如何来定义一个泛型方法,他在写法上与普通方法有什么不同/**定义一个泛型方法的语法如下* 方法作用域修饰符 <泛型类型>...原创 2019-05-11 21:14:00 · 6171 阅读 · 0 评论 -
反射原理及动态代理模式(二)
一、什么是代理模式前面说了那么多原理,那么反射到底什么时候用呢?研究过设计模式的朋友应该听过代理模式,代理模式就是给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用(经常找人代购各种化妆品的小姐姐应该一听就明白了,如果还有不懂的男同胞,那只能祝你金牌单身汪快乐!哈哈)。代理模式又分为静态代理模式和动态代理模式。而动态代理模式就需要用到我们的反射。二静态代理和动态代理的区别这里...原创 2019-05-25 18:30:21 · 229 阅读 · 0 评论 -
反射原理及动态代理模式(一)
背景做Java或者Android开发的攻城狮们应该都听过反射(别想歪了,别开车,兄得)。或者根本就没听过,当有前辈提起说某个功能可以用反射实现,你试一下的时候,很多人和我一样可能就一脸懵逼了。这里我就把自己学习到了关于反射的知识,和大家分享一下。一、什么是反射首先,什么是反射,我们为什么要用反射或者什么时候需要用反射呢?反射反射,关键就在于它那个反字上(不是射哦。sorry,又开车啦...原创 2019-05-25 18:30:04 · 246 阅读 · 0 评论 -
多线程三部曲——线程概念与启动
平时开发过程中,多线程编程开发是我们必须掌握的技能。那么什么是多线程?如何创建多线程,什么又是线程间通信以及线程安全?下面我们就一个问题一个问题的来解答。一、基本概念在讲什么是多线程以及多线程编程注意项之前我们需要先了解几个基本概念。(1)、CPU核心数和线程数的关系如今手机都是四核、八核。那么这个核说的就是CPU的核心数。而核心数与线程数是1:1的关系,也就是说一个4核的CPU,...原创 2019-06-15 16:52:42 · 247 阅读 · 0 评论 -
多线程三部曲——多线程的实现方式
前面讲了很多多线程的概念和创建原理,但是在Android中如何实现多线程,有几种实现多线程的方式?他们各自的实现原理是什么?以及他们之间的区别是什么?一、多线程之线程池线程池可以看成是一个线程的集合,需要运行任务时从池中拿一个线程来执行,执行完毕,线程放回池中。它内部又分为核心线程和非核心线程。在开发过程中,合理地使用线程池能够带来3个好处:(1):降低资源消耗。通过重复利用已创建...原创 2019-06-15 18:46:09 · 329 阅读 · 0 评论 -
多线程三部曲——线程间同步与通信
学习多线程,那线程间同步与通信是必不可少得内容啦!首先我们讲一下什么是线程间同步,其实我们在上一章已经提到过一种线程间通信方式了:Handler作为线程间通信得桥梁,也是最常用得线程间通信方式。那线程间通信还有其他方式吗?答案是有滴。一、线程间通信方式(1)、Handler桥梁在Android中Handler机制是系统核心机制的重要成员之一,可以说整个Android系统几乎都是运行...原创 2019-06-16 20:50:47 · 337 阅读 · 0 评论 -
Android热修复核心——ClassLoader
背景:如今比较火的技术中热修复算是一种了。他能够帮助我们在不升级应用版本的情况下修复应用Bug。那么这种技术如何实现呢?这里我们先不急着讲如何去实现热修复,因为能力还达不到。我们先了解一下这个技术的核心:类加载。一、概念了解:Dalvik和ART(1)什么是Dalvik上一章我们讲了Java虚拟机JVM。但实际上Java中JVM可以理解为一种虚拟机规范,现实中各家都根据这个规范开发...原创 2019-07-03 20:10:34 · 293 阅读 · 0 评论 -
一问三不知的Java虚拟机
有人可能会说,你一个做Android开发的要研究虚拟机干嘛。嗯,可能是女朋友不在身边闲的。但是不学不行啊,现在出门面试,面试官都是各种原理,各种虚拟机知识的问。然后就是各种一问三不知,最后就是各种回家等通知的GG了。所以不学Java虚拟机的Android开发不是好的攻城狮。一、虚拟机的历史这个去网上一搜一大堆,都写烂了。这里就不再写了。想了解的去百度一下吧。二、JVM是干嘛的...原创 2019-06-29 21:13:36 · 248 阅读 · 0 评论 -
框架设计之MVP模式
背景随着Java/Android技术快速的发展更新,同时为了开发更快捷、代码可读性更高、更解耦(UI和数据逻辑的解耦)一堆牛人设计了一堆的框架模式。在Android中最出名的莫过于MVC、MVP、MVVM这三种模式了。首先我们分别讲一讲这三种设计模式的原理,以及优缺点。最后我将结合公司目前的项目利用前面说过的泛型来实现一个通用版的MVP模式架构。一、MVC模式MVC全名是Mode...原创 2019-05-20 19:26:03 · 475 阅读 · 0 评论