- 博客(35)
- 收藏
- 关注
原创 TCP/IP、HTTP简介
一、TCP/IP模型TCP/IP协议模型,包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在...
2019-03-23 13:35:31 415
原创 Android Context简介
Android应用模型是基于组件的应用设计模式,组件的运行要有一个完整的Android工程环境,在这个环境下,Activity、Service等系统组件才能够正常工作,而这些组件并不能采用普通的Java对象创建方式,new一下就能创建实例了,而是要有它们各自的上下文环境,也就是我们这里讨论的Context。可以这样讲,Context是维持Android程序中各组件能够正常工作的一个核心功能类。C...
2019-03-06 21:28:30 186
原创 Android进程优先级
在安卓系统中:当系统内存不足时,Android系统将根据进程的优先级选择杀死一些不太重要的进程,优先级低的先杀死。进程优先级从高到低如下前台进程处于正在与用户交互的activity与前台activity绑定的service调用了startForeground()方法的service正在执行oncreate(),onstart(),ondestroy方法的 service。进程中包含正...
2019-03-02 13:36:46 302
原创 Android 动画简介
一、Android 动画分类Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画传统动画又包括 帧动画(Frame Animation)和补间动画(Tweened Animation)二、传统动画1.帧动画帧动画是最容易实现的一种动画,这种动画更多的依赖于完善的UI资源,他的原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果;有点...
2019-03-02 13:26:46 144
原创 Android Bitmip加载
一、为什么Bitmap需要高效加载现在的高清大图,动辄就要好几M,而Android对单个应用所施加的内存限制,只有小几十M,如16M,这导致加载Bitmap的时候很容易出现内存溢出。为了解决这个问题,就出现了Bitmap的高效加载策略。其实核心思想很简单。假设通过ImageView来显示图片,很多时候ImageView并没有原始图片的尺寸那么大,这个时候把整个图片加载进来后再设置给ImageV...
2019-03-01 23:15:45 246
原创 Android进程间通信方式
一、使用 Intent1.Activity,Service,Receiver 都支持在Intent中传递Bundle数据,而Bundle实现了Parcelable接口,可以在不同的进程间进行传输。2.在一个进程中启动了另一个进程的Activity,Service和Receiver ,可以在Bundle中附加要传递的数据通过Intent发送出去。二、使用文件共享1.Windows 上,一个文...
2019-02-21 15:06:48 169
原创 Android虚拟机
一、什么是Dalvik虚拟机Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Andro...
2019-02-20 17:17:13 2682
原创 Android自定义View
View的绘制是从上往下一层层迭代下来的。DecorView–>ViewGroup(—>ViewGroup)–>View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。一、Measure流程Measure就是测量每个控件的大小。调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setM...
2019-02-19 16:45:21 139
原创 LruCache简介
一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此LRU(Least Recently Used)缓存算法便应运而生,LRU是最近最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那...
2019-02-18 18:51:03 294
原创 IntentService
IntentService是Android里面的一个封装类,继承自四大组件之一的Service。作用: 处理异步请求,实现多线程。工作流程图如下:注意:若启动IntentService多次,那么每个耗时操作则以队列的方式在IntentService的onHandleIntent回调方法中依次执行,执行完自动结束。实现步骤:步骤1:定义IntentService的子类:传入线程名称、复写...
2019-02-18 18:09:56 138
原创 HandlerThread简介
在Android系统中,我们执行耗时操作都要另外开启子线程来执行,执行完线程以后线程会自动销毁。想象一下如果我们在项目中经常要执行耗时操作,如果经常要开启线程,接着又销毁线程,这无疑是很消耗性能的。解决方法:1.使用线程池2.使用HandlerThreadHandlerThread的使用场景HandlerThread是Google帮我们封装好的,可以用来执行多个耗时操作,而不需要多次开启...
2019-02-18 17:56:07 194
原创 AsyncTask简介
AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类(轻量体现在使用方便、代码简洁),它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。AsyncTask的内部封装了两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handler(InternalHandler)。其中SerialExecut...
2019-02-17 23:45:38 489
原创 Android事件分发机制
事件分发的对象是:事件当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件)。主要发生的Touch事件有如下四种:MotionEvent.ACTION_DOWN:按下View(所有事件的开始)MotionEvent.ACTION_MOVE:滑动ViewMotionEvent.ACTION_CANCEL:非人为原因结束本次事件MotionEvent....
2019-02-16 19:37:36 114
原创 Android消息机制
1.消息机制的简介在Android中使用消息机制,我们首先想到的就是Handler。Handler是Android消息机制的上层接口。通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。通常情况下,Handler的使用场景就是更新UI。Handler的运行是需要底层的MessageQueue和Looper的支撑。在本消息机制中,主要有如下几个部分:1、MessageMessa...
2019-02-15 19:40:14 125
原创 Fragment详解
1. Fragment简介Fragment是显示在Activity中的Activity。它可以显示在Activity中,然后它也可以显示出一些内容。因为它拥有自己的生命周期,可以接受处理用户的事件,并且你可以在一个Activity中动态的添加,替换,移除不同的Fragment,因此对于信息的展示具有很大的便利性。2. Fragment的生命周期因为Fragment是依附于Activity存在...
2019-02-01 23:22:44 372
原创 Android四大组件之ContentProvider
ContentProvider即内容提供者属于Android的四大组件之一。ContentProvider是Android中提供的专门用于不同应用间数据交互和共享的组件。ContentProvider实际上是对SQLiteOpenHelper的进一步封装,以一个或多个表的形式将数据呈现给外部应用,通过Uri映射来选择需要操作数据库中的哪个表,并对表中的数据进行增删改查处理。ContentProv...
2019-01-31 21:08:28 162
原创 Android四大组件之BroadcastReceiver
BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。Android 广播分为两个角色:广播发送者、广播接收者一、 作用用于监听 / 接收 应用发出的广播消息,并做出响应应用场景:不同组件之间通信(包括应用内 / 不同应用之间)与 Android 系统在特定情况下的通信(如当电话呼入...
2019-01-28 14:19:17 110
原创 Android四大组件之Service
一、Service简介Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要...
2019-01-27 20:29:41 137
原创 Android四大组件之Activity
一、Activity的生命周期首先,我们来了解一下Activity典型的生命周期一个Activity从启动到结束会以如下顺序经历整个生命周期:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()。包含了六个部分,还有一个onRestart()没有调用,下面就来一一介绍onCr...
2019-01-26 22:22:42 158
原创 Java内存区域和内存模型
一、Java内存区域方法区(公有): 用户存储已被虚拟机加载的类信息,常量,静态常量,即时编译器编译后的代码等数据。异常状态 OutOfMemoryError。堆(公有): 是JVM所管理的内存中最大的一块。唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。异常状态 OutOfMemoryError。虚拟机栈(线程...
2019-01-25 17:03:51 612
原创 Java虚拟机-------对象的创建、内存布局和访问定位
一、对象的创建1.虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用;2.检查这个符号引用代表的类是否已经被加载,解析和初始化过。如果没有,那必须先执行响应的类加载过程;3.在类加载检查功通过后,为新生对象分配内存。对象所需的内存大小在类加载完成后便可完全确定。二、对象的内存布局分为3个区域:对象头,实例数据,对齐填充。对象头:包括两部分信息...
2019-01-23 22:29:10 136
原创 volatile关键字
一、Java内存模型Java内存模型规定了所有的变量都存储在主内存中。每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来)。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。二、原子性1.定义原子性:即一个操作或者多个操作,要么全部执行,...
2019-01-22 22:52:20 81
原创 生产者/消费者模式
一、线程间通信的两种方式1.wait()/notify()Object类中相关的方法有notify方法和wait方法。因为wait和notify方法定义在Object类中,因此会被所有的类所继承。这些方法都是final的,即它们都是不能被重写的,不能通过子类覆写去改变它们的行为。①wait()方法: 让当前线程进入等待,并释放锁。②wait(long)方法: 让当前线程进入等待,并释放锁,...
2019-01-21 21:51:35 137
原创 synchronized关键字
一.synchronized简介1.synchronized实现同步的基础:Java中每个对象都可以作为锁。当线程试图访问同步代码时,必须先获得对象锁,退出或抛出异常时必须释放锁。2.Synchronzied实现同步的表现形式分为:代码块同步 和 方法同步。二.synchronized原理JVM基于进入和退出Monitor对象来实现 代码块同步 和 方法同步 ,两者实现细节不同。代码块同...
2019-01-18 21:44:46 134
原创 死锁
一、死锁产生的条件互斥条件:一个资源每次只能被一个线程使用。请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:线程已获得的资源,在未使用完之前,不能强行剥夺。循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。二、在JAVA编程中,有3种典型的死锁类型:静态的锁顺序死锁,动态的锁顺序死锁,协作对象之间发生的死锁。1.静态的锁顺序死锁a和b两个...
2019-01-18 21:29:37 115
原创 Java线程池
在我们的开发中经常会使用到多线程。我们往往会通过new Thread来开启一个子线程,待子线程操作完成以后通过Handler切换到主线程中运行。这么以来我们无法管理我们所创建的子线程,并且无限制的创建子线程,它们相互之间竞争,很有可能由于占用过多资源而导致死机或者OOM。所以在Java中为我们提供了线程池来管理我们所创建的线程。一.线程池的优势①降低系统资源消耗,通过重用已存在的线程,降低线程...
2019-01-18 21:20:03 118
原创 Java创建线程的三种方式
一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代 表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。二、通过Runnable接口创建线程类(1)定义runnable接口的实现类,并重写该接口的r...
2019-01-17 17:18:58 7413 11
原创 Java抽象类与接口区别
1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。2.抽象类要被子类继承,接口要被类实现。3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。4.抽象类里可以没有抽象方法。5.接口可以被类多实现(被其他接口多继承),抽象类只能被单继承。6.接口中没有 this 指针,没有构造函数,不能...
2019-01-13 20:50:58 94
原创 Java异常
Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制用到的几个关键字:try – 用于监听catch – 用于捕获异常finally – finally语句块总是会被执行throw – 用于抛出异常throws – 用在方法签名中,用于声明该方法可能抛出的异常值得注意的是finally:它主要用于回收在try块里打开的物理资源(如数据库连接、网络连接和磁盘文...
2019-01-13 20:45:40 90
原创 Java NIO
Java NIO与之间的普通IO的工作方式不同。标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作。Buffer利用Buffer读写数据,通常遵循四个步骤:1.把数据写入buffer;2.调用flip;(通过flip方法把buffer从写模式调整到读模式)3.从Buffer中读取数据;4.调用buffer.clear()(当读取...
2019-01-13 20:32:00 94
原创 Java IO
IO流的概念Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源抽象表述为"流"。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。流有输入和输出,输入时是流从数据源流向程序。输出时是流从程序传向数据源,而数据...
2019-01-11 17:04:21 117
原创 Java反射
Java反射定义Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制的功能1.在运行时判断任意一个对象所属的类。2.在运行时构造任意一个类的对象。3.在运行时判断任意一个类所具有的成员变量和方法。4.在运行时调用任...
2019-01-11 16:18:36 127
原创 HashMap,LinkedHashMap与TreeMap
HashMap:基于Map接口实现,允许null值,非同步,不保证有序,也不保证不随时间变化。在HashMap中有两个很重要的参数,容量(Capacity)和负载因子(Load factor)。容量(Capacity)就是bucket的大小,负载因子(Load factor)就是bucket填满程度的最大比例。HashMap中put函数的实现:1.对key的hashCode做hash,然...
2019-01-09 13:09:48 588 1
原创 ArrayList与LinkedList对比
ArrayList:1.ArrayList以数组方式实现,节约空间,但数组有容量限制,当超出限制时,他会自动增加50%容量,用System.arraycopy()复制到新的数组。2.按数组下标访问元素-----get()/set()的性能很高。3.但如果按下标插入,删除元素,则要用System.arraycopy()来移动部分受影响的元素,性能会变差。LinkedList:1.以双向链表...
2019-01-08 19:28:57 114
原创 Java集合
一.Java集合可分为List、Set、Map和Queue四中体系:List代表有序可重复集合。Set代表无序不可重复集合。Map代表具有映射关系的集合。Java 5增加了Queue集合,代表一种队列集合实现。二.Java集合与数组的区别:(1)数组长度在初始化时指定,只能保存定长的数据。而集合可以保存数量不确定的数据,同时可以保存具有映射关系的数据。(2)数组的元素既可以是基本类型...
2019-01-08 17:15:55 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人