- 博客(100)
- 收藏
- 关注
原创 设计模式-代理模式
一 引言我们在编写一个功能函数时,经常需要在其中写入与功能不是直接相关但很有必要的代 码,如日志记录,信息发送,安全和事务支持等,这些枝节性代码虽然是必要的,但它会带来以下问题:枝节性代码游离在功能性代码之外,它不是函数的目的,这是对OO的一种破坏枝节性代码会造成功能性代码对其它类的依赖,加深类之间的耦合,枝节性代码带来的耦合度会造成功能性代码移植困难,可重用性降低枝节性代
2016-12-08 16:41:11
534
原创 高内聚低耦合
一 耦合性 耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系,模块间联系越多,耦合性越强,模块的独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分摸块的一个准则就是高内聚低耦合。形象的说就是,写的代码要和电脑一样,主类就是电脑的主机箱,当程序需要实现什么功能的时候只需要把其
2016-12-08 12:41:34
697
转载 Android中的MVC与MVP
转自:http://blog.youkuaiyun.com/lmj623565791/article/details/46596109一、概述对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等。本篇博文仅是为了做下记录,提出一些自己的看法,和帮助大家如何针对一个Activity页面去编写针对MVP风格的代码
2016-12-05 14:48:30
484
转载 Java 自动装箱和拆箱
1.Java数据类型 在介绍Java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型。 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型)。基本类型的数值不是对象,不能调用对象的toString()、hashCode()、getClass()、equals()等方法。所以J
2016-11-23 18:00:14
574
原创 Java中包装类型的作用
Java是面向对象的语言,每一种基本数据类型都应该有对应的对象类型,方便对基本类型进行操作。包装类型可以解决一些基本类型解决不了的问题,如下:1 有时候一个函数需要传递一个Object变量 而你想传递int类型的进去显然不行,这就要用到包装类。public void test(Object obj){}想传递5进去就可以这样test(new Integer(5));2 集合不
2016-11-21 18:47:48
10229
转载 Android中ViewPager使用
ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它: 1.在住布局文件里加入[html] view plain copy android.support.v4.view.ViewPager 这个组件,注意这个组件是用来显示左右滑动的界面的,如果不加载xml布局文件,他是不会显示内容的。
2016-11-09 15:04:38
996
转载 MySQL常用操作
转自:http://www.cnblogs.com/bzys/archive/2013/01/20/2869029.html一、从命令行登录MySQL数据库服务器 1、登录使用默认3306端口的MySQL/usr/local/mysql/bin/mysql -u root -p2、通过TCP连接管理不同端口的多个MySQL(注意:MySQL4.1以上版本才有此项功能)
2016-11-02 17:14:29
352
原创 生产者消费者模型
当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队
2016-10-31 15:21:55
435
原创 TCP/IP协议分层
从上到下分为四层,应用层、传输层、网络层、网络接口层,应用层包括HTTP协议、SMTP协议、FTP协议、DNS协议、Telnet协议等,传输层包括TCP协议和UDP协议,网络层包括IP协议、ICMP协议(控制报文协议),网络接口层包括ARP协议(地址解析)、RARP协议(反地址解析)。发送的数据在应用层,加上头信息,封装后,传递到传输层,传输层把数据加上头信息,继续封装,传递给网络层,网络层再传递
2016-10-31 15:16:41
645
原创 TCP和UDP的区别
TCP和UDP都是传输层的网络协议,TCP是面向连接的,可靠的传输协议,UDP传送数据前不需要进行连接,传送的数据不保证到达,达到的数据也不保证是按顺序接收的。 TCP是面向连接的,在传输数据之前要经过三次握手才能建立可靠的连接,传输过程中, TCP通过检验和、序列号、确认应答保证数据可以按顺序到达接收方,并且数据丢失的话,会重新发送丢失的报文。UDP在传输前不用事先建立连接,直接发
2016-10-31 15:15:16
455
原创 TCP的三次握手,四次挥手
(1)建立连接的时候有几个关键的数据段,ACK(确认应答数据段),ACK=1时连接才有效,连接建立后所有发送的报文的ACK必须为1;SYN(同步序号),SYN连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,应在响应报文中使SYN=1和ACK=1,也就是SYN等于1表示这是一个连接请求或连接接受报文。建立连接的时候,第一步是主机A发出请求连接报文
2016-10-31 15:12:39
527
原创 HTTP和HTTPS的区别
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等支付信息,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密(HTTP下面是TCP,HTTPS下面是SSL,SSL下面是TCP;HTTP端口是80,HTTPS端口是443),很多银行网站或电子邮箱安全级别
2016-10-31 15:08:29
386
原创 HTTP的详细请求过程
(1)http是应用层的协议,发送请求之前要先通过socket建立TCP连接,socket是通过IP和端口号建立的,所以在建立连接前要通过DNS协议把URL转换成对应的IP,客户端先把这个url发给本机配置的DNS服务器,如果能够找到相应的url就返回ip,否则DNS将继续把解析请求发送给上级DNS服务器,请求会一直发送到根DNS服务器直到得到结果解析的IP。(2)DNS解析URL得到IP地址
2016-10-31 15:01:27
10315
原创 HTTP get和post请求
(1)get请求方式用于获取、查询资源,post请求方式用于更新、改变资源,get方式是安全的和幂等的,所谓安全是指get请求仅仅是获取资源,并不会更改资源内容,幂等是指对同一个URL的多个请求应该返回同样的结果,从请求自身的角度来看并没有改变资源。Post请求可能会改变服务器上的资源。(2) Get请求的数据会附在URL后面,以?分割URL和传输数据,参数之间以&相连,请求的数据量的大小受U
2016-10-31 14:59:32
458
原创 Android中minSdkVersion、targetSdkVersion、compileSdkVersion含义
minSdkVersion:应用能运行的最低的API Level,低于这个值的Android机,不能安装该应用。targetSdkVersion:通知系统,测试应用的测试机的sdk版本,应用兼容targetSdkVersion之前的机型。compileSdkVersion:使用哪个版本Android SDK编译,使用任何新添加的API就要使用对应level的Android SDK。
2016-10-31 14:29:58
700
转载 Android SDK 6.0新特性
转自http://www.open-open.com/lib/view/open1451369220339.htmlandroid的权限系统一直是首要的安全概念,因为这些权限只在安装的时候被询问一次。一旦安装了,app可以在用户毫不知晓的情况下访问权限内的所有东西。难怪一些坏蛋利用这个缺陷恶意收集用户数据用来做坏事了!android小组也知道这事儿。7年了!权限系统终于被重新设
2016-10-31 14:22:18
1572
原创 关于ActivityThread
ActivityThread的内部类H(handler)负责activity、service声明周期消息的处理、window窗口出现和隐藏消息处理等。main()方法在ActivityThread中,是程序的入口,在main()中开启了looper.loop(),ActivityThread运行在主线程中。ActivityThread源码:http://blog.youkuaiyun.com/
2016-10-30 23:02:25
517
原创 Handler延迟消息处理
MessageQueue,以队列的形式管理message,message先进先出,但其内部是采用单链表来存储消息列表。post(Runnable r)、postDelayed(Runnabler, long delayMillis)、sendMessage(Message msg)、sendMessageDelayed(Message msg, long delayMillis)最终调用的
2016-10-30 22:59:17
3072
原创 Android应用的私有数据被其他应用访问
私有数据是否允许其他应用访问,取决于文件创建时,文件的创建者给文件赋予的权限,也就是指定的mod值。其他应用如何访问本应用的私有数据?如果当前应用私有文件可读或者可写的话,根据当前应用包名创建这个包的上下文,其他应用通过这个Context就可以访问当前应用的私有数据。参考链接:http://blog.youkuaiyun.com/roland_sun/article
2016-10-30 22:54:25
1939
原创 Android中数据存储方式
本质来说分三种:保存在sdcard上(手机自带的磁盘);手机内置内存(即data/data/目录);运行时内存(list、map)
2016-10-30 22:50:41
336
原创 Android中View的绘制流程以及View的优化
Measure过程measure用来测量view的宽和高,performTraversals()调用performMeasure()完成顶级View(DectorView)的测量,在performMeasure()中调用measure(),measure()中又会调用onMeasure(),在onMeasure()中对所有的子元素进行测量,这样流程就从父容器传递到了子元素中,子元素又会重复父容
2016-10-30 22:41:54
536
原创 Android中的AMS
AMS是一个系统关键服务,运行在系统进程System_Server中,AMS实现了IBinder接口,它在一个单独的线程中运行,activity/service生命周期的回调都由AMS完成。AMS提供了一个ArrayList mHistory来管理所有应用的activity,activity在AMS中的形式是ActivityRecord,task在AMS中的形式为TaskRecord,进程
2016-10-30 22:40:04
1021
原创 Android Binder机制
Android系统的虚拟地址内存分为用户空间和内核空间,用户空间是非共享的,只让应用自己访问,内核空间是共享的,Binder通过共享内核空间实现进程间通信。Binder把进程A生成的IPC数据(在用户空间生成),传递给BinderDriver,Binder Driver在内核空间运行,之后Binder Driver再把IPC数据传递给进程B。IPC数据由4部分组成,Handle、R
2016-10-30 22:37:42
606
原创 Android多线程下载SDK的设计,支持断点续传
5确定了每个线程负责下载的区间,建立线程集合,存放所有工作线程,还要建立数据库存储每个线程这次下载的文件块的第一个字节、最后一个字节、本次下载的容量,线程的id(用于标记线程)、URL地址。然后启动多个线程,发送HTTP请求获取数据,通过输入流把文件读入后,RandomAccessFile保存在本地。(RandomAccessFile对应SD卡上的文件,RandomAccessFile.s
2016-10-30 22:22:35
591
转载 Android中图片占用内存计算
转自:http://blog.163.com/hero_213/blog/static/39891214201412621834253/Android中有四种,分别是:ALPHA_8:每个像素占用1byte内存ARGB_4444:每个像素占用2byte内存ARGB_8888:每个像素占用4byte内存RGB_565:每个像素占用2byte内存Andr
2016-10-30 21:54:51
1578
原创 Android中的ImageLoader实现思路
具备的功能:1 图片的同步加载,开启一个子线程一张接一张的加载图片2 图片的异步加载,开启多个子线程同时加载图片,一个线程加载一张3 图片的压缩4 图片的缓存,包括内存缓存、磁盘缓存5 图片的下载提供两个接口,图片同步加载的接口、图片异步加载的接口,同步加载开启一个子线程一张接着一张的加载图片,异步加载接口开启多个子线程同时加载多张图片,每个线程加载一张,多个线程在线程池中
2016-10-30 21:47:36
364
原创 BitMap加载、压缩、缓存
加载图片:压缩图片:(1)加载大尺寸图片时,采样压缩很多时候ImageView尺寸小于图片原始尺寸,没必要把原始图片全部加载到内存,可能造成oom,并且ImageView也没办法全部显示原始图片,采样压缩将缩小后的图片在ImageView中显示,同时降低图片内存占用从而避免oom,提高Bitmap加载性能。上述四种Bitmap加载方法都支持BitmapFactory.O
2016-10-30 21:40:23
754
原创 Android中物理返回键的重写方法
重写onBackPressed()或者onKeyDown(intkeyCode, KeyEvent event)注意两个方法不能同时重写
2016-10-30 20:52:02
3801
转载 Android进程优先级以及线程间通信方式
Android中的进程默认情况下, 同一个application中的所有component运行在同一个linux进程下. 启动一个component A时, 如果已存在处于运行状态中的component B, 且A和B属于同一个application, 那么component A将在component B所在的进程下运行. 否则将为A创建一个新的linux进程. 开发者也可以为applic
2016-10-30 20:42:33
526
原创 Android中进程间通信方式(IPC)
1使用BundleBundle实现了Parcelable接口,可以在不同进程间传递,在Bundle中附加数据,通过intent可以由一个进程的组件启动另一个进程的组件。2 使用文件一个进程在文件中写入数据,其他进程再读取(涉及到写操作,线程要同步);或者一个进程把对象序列化到本地,另一个进程把对象反序列化。(进程间通信不适合用SharedPreference,系统对SP的读写有一定的缓
2016-10-30 20:35:38
517
转载 Android中的parcelable接口使用
转自:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html1. Parcelable接口Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing
2016-10-30 20:22:09
362
原创 Android多进程使用场景
1 如何使组件运行在其他进程中正常情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行。但是如果需要将四大组件运行在单独的进程中,就需要用到Android:process属性了。我们可以为android的组件指定process属性来指定它们运行在指定进程中。通过设置组件的p
2016-10-30 20:18:40
1945
转载 Android内存泄露分析工具MAT
转自:http://blog.youkuaiyun.com/aaa2832/article/details/194196791 内存泄漏的排查方法Dalvik Debug Monitor Server (DDMS) 是 ADT插件的一部分,其中有两项功能可用于内存检查 :· heap 查看堆的分配情况· allocation tracker跟踪内存分配情况DDMS
2016-10-30 19:51:19
346
原创 Android中的内存泄露
(1) 单例的使用可能造成内存泄露单例模式只允许应用程序存在一个实例对象,并且这个实例对象的生命周期和应用程序的生命周期一样长,如果单例对象中拥有另一个对象的引用的话,这个被引用的对象就不能被及时回收。解决:在单例类里,把内部持有的对象声明为弱引用(2) 静态集合类的使用静态的集合类的生命周期和应用程序的生命周期一样长,所以在程序结束前容器中的对象不能被释放,会造成内存泄露。
2016-10-30 19:43:42
290
原创 Android中如何在子线程执行任务完成后更新UI
1 AsyncTask(或者Thread)+Handler启动子线程,子线程执行完任务后,通过Handler给主线程中的Looper发送消息2 Activity.runOnUiThread(Runnable r)在Activity中启动子线程,子线程执行完成任务后,调用runOnUiThread(Runnable r)。runOnUiThread(Runnable r)是Activ
2016-10-30 19:40:15
2490
原创 Android中判断当前线程是否是主线程
Looper.myLooper()==Looper.getMainLooper();Thread.currentThread()==Looper.getMainLooper().getThread();Looper.myLooper()获得当前线程中的Looper对象Looper.getMainLooper()获取主线程的Looper对象
2016-10-30 19:24:26
665
原创 Volley使用
volley是进行HTTP通信的库,volley封装了HTTP请求过程和响应过程,用Request作为HTTP的请求对象,Response作为HTTP的响应对象,Volley既可以使用StringRequest、JsonRequest发送HTTP请求获取字符串数据,也可以使用ImageRequest、ImageLoader、NetworkImageView加载图片。使用:使用StringReq
2016-10-29 21:49:55
481
原创 EventBus使用
EventBus是实现事件订阅和发布的一个开源库,可以在Android各个组件之间传递消息和处理消息,EventBus可以降低发送者和接收者之间的耦合度。使用的时候,需要先实现一个事件类,然后在需要订阅事件的组件中调用EventBus实例的register(this)注册事件,注册完成后,通过EventBus的post(Objectobject)发送事件,注册事件的组件收到消息后,会回调相关的
2016-10-29 19:54:23
1276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人