学习笔记
_成cheng
Android
展开
-
设计模式---原型模式
模式的使用场景 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗; 通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式; 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。Intent中使用了原型模式Uri uri = Uri.parse("smsto转载 2017-04-26 21:53:03 · 133 阅读 · 0 评论 -
设计模式----Builder模式
最常用到的Builder模式就是AlertDialog.Builder, 使用该Builder来构建复杂的AlertDialog对象。 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时; 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时; 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;//显示基本的AlertD转载 2017-04-26 21:50:58 · 164 阅读 · 0 评论 -
设计模式----单例模式
1 单例模式 特点: 1)只能有一个实例 2)必须自己创建自己的唯一实例 3)必须给所有对象提供这一实例 第一种 饿汉式public class Singleton{ private Singleton(){}; private static Singleton instance = new Singleton(); public stati原创 2017-04-26 21:26:23 · 176 阅读 · 0 评论 -
异常处理
异常分为:Checked异常和Runtime异常。 Checked异常都是可以在编译阶段被处理的异常,所以强制程序处理所有的Checked异常,要么声明(throws)抛出,要么显示用catch来捕捉。只有Java语句提供了Checked异常。 1、try…catch捕获异常 把系统的业务实现代码放在try块中定义,所有异常处理逻辑放在catch块中进行处理。 Java7提供多捕获异常:原创 2017-05-27 15:45:21 · 173 阅读 · 0 评论 -
泛型
Java的参数化类型被成为泛型。允许程序在创建集合是指定集合元素的类型。 Java7以前:List<String> strList = new ArrayList<String>(); Java7以后:List<String> strList = new ArrayList<>();所谓泛型就是在定义类、接口、方法时使用类型形参,类型形参可以在整个接口、类体内当成类型使用。 注意: 1、当创原创 2017-05-26 22:18:34 · 287 阅读 · 0 评论 -
性能优化——Android群英传
1、布局优化 1)避免Overdraw 2)优化布局层级 降低View树的高度。 3)避免嵌套过多无用布局 4)使用<include>标签重用Layout 5)使用<ViewStub>实现View的延迟加载,是一个轻量级的组件,不仅不可视,而且大小为0.需要的时候再显示。两种方式显示这个View。 mViewStub.setVisibility(View.VISIBLE); View原创 2017-05-16 22:30:25 · 182 阅读 · 0 评论 -
Android安全机制
五道防线: 1、代码安全机制——代码混淆proguard。 2、应用接入权限控制——AndroidMainifest文件权限声明、权限检查机制。缺点:被授予的权限无法停止。在应用声明App使用权限时,用户无法针对部分权限进行限制。权限的声明机制与用户的安全理念相关。 3、应用签名机制——数字证书。 4、Linux内核安全机制——Uid、访问权限控制。 5、Android虚拟机沙箱机制——沙原创 2017-05-16 21:38:37 · 215 阅读 · 0 评论 -
集合
Java集合类主要是由两个接口派生而出:Collection和Map. Collection : Set、Queue、List。 Set集合:无序,不可重复。 HashSet类 1、不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。 2、HashSet不是同步的,如果多个线程同时访问一个HashSet,则必须通过代码来保证其同步。 3、集合元素可以是null。 当向原创 2017-05-26 21:18:18 · 246 阅读 · 0 评论 -
异步消息处理机制
[借鉴](http://blog.csdn.net/guolin_blog/article/details/9991569)为什么不能在子线程更新UI? 1、UI是非线程安全的,主线程和子线程同时更新UI的话会导致错误,如UI错乱之类的。 2、UI更新是很耗性能的,更别说为了线程安全加锁了,最简单的方法就是更新UI的操作放到一个线程中,即主线程; Handler机制: 在主线程和子线程分别原创 2017-04-20 21:30:04 · 215 阅读 · 0 评论 -
ListView
ListView : 用于在应用程序中使用列表的形式来展现一些内容。 1)将数据填充到布局 2)处理用户的选择点击等操作 ListView的创建需要3个元素。 (1)ListView中的每一列的View。 (2)填入View的数据或者图片等。 (3)连接数据与ListView的适配器。 常用适配器: ArrayAdapter :用来绑定一个数组,支持泛型操作 SimpleAda转载 2017-04-20 20:09:32 · 181 阅读 · 0 评论 -
Handler内存泄漏
--- [这里写链接内容](http://www.jianshu.com/p/cb9b4b71a820)在实际使用handler中,我们经常会得到如下警告: ⚠ In Android, Handler classes should be static or leaks might occur. 分析: Android应用程序启动时,framework会为该应用程序的主线程创建一个Loope原创 2017-04-25 20:51:39 · 375 阅读 · 0 评论 -
正则表达式
一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。是一个用于匹配字符串的模板。 使用Pattern和Matcher来使用正则表达式: Pattern对象是正则表达式编译后在内存中的表示形式。因此,正则表达式字符串必须先被编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象原创 2017-05-26 11:15:22 · 161 阅读 · 0 评论 -
String、StringBuffer和StringBuilder类
都实现了CharSequence接口。 String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象的字符序列是不可改变的,直至这么对象被销毁。 StringBuffer对象则代表一个字符序列可变的字符串,通过它提供的append()、insert()、reverse()、setChartAt()等方法可以改变这个字符串对象的字符序列。最后调用它的toString()方法将其转原创 2017-05-26 10:38:46 · 153 阅读 · 0 评论 -
布局优化
摘自 1、尽量多使用RelativeLayout和LinearLayout, 不要使用绝对布局AbsoluteLayout,在布局层次一样的情况下, 建议使用LinearLayout代替RelativeLayout, 因为LinearLayout性能要稍高一点,但往往RelativeLayout可以简单实现LinearLayout嵌套才能实现的布局。 2、将可复用的组件抽取出来并通过includ原创 2017-04-20 20:57:12 · 381 阅读 · 0 评论 -
equals与==的区别
http://www.importnew.com/6804.html 1、 使用==比较两种情况 比较基础数据类型(Java中基础数据类型包括八中:short,int,long,float,double,char,byte,boolen):这种情况下,==比较的是他们的值是否相等。 引用间的比较:在这种情况下,==比较的是他们在内存中的地址,也就是说,除非引用指向的是同一个new出来的对象,原创 2017-04-26 22:12:34 · 182 阅读 · 0 评论 -
IntentFilter
启动Activity有显示调用和隐式调用。 显示调用需要明确指定启动对象的组件信息,包括包名和类名,这里主要介绍隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中做设置的过滤信息,有action、category、data. action:是一个字符串,要求Intent中的action存在且必选和过滤规则中的**其中一个**action相同,且action区分大小写。原创 2017-08-05 15:37:40 · 232 阅读 · 0 评论 -
Intent Flag启动模式——Android群英传
系统提供了两种方式设置一个Activity的启动模式: 一个是通过在AndroidMainifest文件中的属性android:launchMode来设置 另一种就是本文要介绍的通过Intent的flag来设置。 1、Intent.FLAG_ACTIVITY_NEW_TASK 使用一个新的Task来启动一个Activity,但启动的每个Activity都将在一个新的Task中。通常使用在从原创 2017-05-15 21:34:09 · 373 阅读 · 0 评论 -
数据保存位置
1)寄存器。最快的保存区域,位于处理器内部,数量十分有限,根据需要由编译器分配。 2)堆栈。驻留于常规RAM(随机访问存储器)区域,是一种特别快、特别有效的数据保存方式,仅次于寄存器。保存某些java数据,特别是对象句柄,但java对象并不放在其中。 3)堆。也在RAM(随机访问存储器)区域,其中保存了java对象。与堆栈不同,编译器不需要知道要从堆里分配多少存储空间,也不必知道存储的数据要原创 2017-05-22 14:13:12 · 469 阅读 · 0 评论 -
类加载机制
当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化来对该类进行初始化。 类的加载:由类加载器完成,类加载器通常由JVM提供。也可以继承ClassLoader基类来创建自己的类加载器。 类的连接:验证、准备、解析。 类的初始化:声明类变量时指定初始值;使用静态初始化块为类变量指定初始值。若没有指定初始值,默认为0.类加载器: 根类加载器。 扩展类加载器。 系原创 2017-05-31 22:44:49 · 235 阅读 · 0 评论 -
网络编程
计算机网络 OSI分层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层:物理+数据链路层、网络层、传输层、应用层。 IP地址:用于唯一地标识网络上的一个通信实体。是数字型,是一个32位整数。 端口:16位整数,用于表示数据交给哪个通信程序处理。0-65535InetAddress InetAddress类来代表IP地址。URLDe原创 2017-05-31 22:11:00 · 226 阅读 · 0 评论 -
线程池
池的本质就是一种缓存技术,牺牲空间换取时间。 Java5新增了一个Executors工厂类来产生线程池,以下几个静态工厂方法创建线程池: 1、newCachedThreadPool():具有缓存功能的线程池。 2、newFixedThreadPool(int nThreads):创建一个可复用的、具有固定线程数的线程池。 3、newSingleThreadExecutor():只有单线程的线原创 2017-05-31 19:30:45 · 261 阅读 · 0 评论 -
多线程
操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。 线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 多线程优点: 线程之间不能共享内存,但线程间共享内存非常容易; 系统创建进程需要为该进程重新分配系统资源,但创建线程则代价小的多,因此使用多线程来实现多任务并发原创 2017-05-31 16:57:15 · 209 阅读 · 0 评论 -
App启动过程
ActivityManagerService组织回退栈时以ActivityRecord为基本单位,所有的ActivityRecord放在同一个ArrayList里,可以将mHistory看作一个栈对象,索引0所指的对象位于栈底,索引mHistory.size()-1所指的对象位于栈顶 Zygote进程孵化出新的应用进程后,会执行ActivityThread类的main方法.在该方法里会先准备好Lo转载 2017-04-27 21:52:47 · 182 阅读 · 0 评论 -
Interface和abstract类的区别
相同点:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。 不同点:接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。 抽象类中的成员可以是private、默认、protected、public原创 2017-04-27 20:56:52 · 167 阅读 · 0 评论 -
数据结构(2)——大话数据结构
线性表(List) 零个或多个数据元素的有限序列。 线性表的顺序存储结构:用一段地址连续的存储单元一次存储线性表的数据元素。 数组的长度:存放线性表的存储空间的长度,存储分配后这个量一般是不变的。 线性表的长度:是线性表中数据元素的个数。 线性表的长度<= 数组的长度 地址计算方法: 待续。。。。原创 2017-05-18 14:15:56 · 157 阅读 · 0 评论 -
数据结构(1)——大话数据结构
1、数据 可以输入到计算机中。 能被 计算机程序处理。 2、数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构:集合结构、线性结构、树形结构、图形结构 物理结构:指数据的逻辑结果在计算机中的存储形式。顺序存储结构和链式存储结构 3、算法 输入输出:具有零个或多个输入,一个或多个输出。 有穷性 确定性:每一步骤都是具有确定的含义,不会出现二义性。 可行性:每一步原创 2017-05-17 15:17:01 · 251 阅读 · 0 评论 -
JDBC
JDBC:Java Database Connectivity,Java数据库连接,它是一种可执行SQL语句的Java API。 JDBC开发的数据库不仅可以跨平台运行,而且可以跨数据库。 1、建立与数据库的连接 2、执行SQL语句 3、获得SQL语句的执行结果。 数据库系统: 网状型数据库 层次型数据库 关系型数据库 面向对象数据库SQL语句几种类型: 查询语句:主要select原创 2017-05-27 22:46:15 · 228 阅读 · 0 评论 -
HashCode
http://c610367182.iteye.com/blog/1930676 以Java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个Hash哈希表中去,这样的话,下次做Object的比较或者取这个对象的时候,它会根据对象的hashcode再从Hash表中取这个对象。这样做的目的是提高取对象的效率。具体过程是这样:new Object(),JV原创 2017-04-26 22:35:09 · 146 阅读 · 0 评论 -
图片加载,避免OOM
--[摘自](http://blog.csdn.net/guolin_blog/article/details/9316683)1、展现高分辨率图片时,先将图片进行压缩。 为了避免OOM异常,最好在解析每张图片的时候都先检查一下图片的大小,大小知道了,我们就可以决定是把整张图片加载到内存中还是加载一个压缩版的图片到内存中。 以下几个因素是我们需要考虑的: 预估一下加载整张图片所需占用的内存。原创 2017-04-20 22:12:38 · 307 阅读 · 0 评论 -
引用方式
1、强引用 当一个对象被一个或一个以上的引用变量所引用时,它处于可达状态,不可能被系统回收机制回收。 2、软引用 对于只有软引用的对象,当系统内存空间足够时,它不会被回收,程序也可使用该对象,但当内存空间不足时,系统可能会回收它。常用于对内存敏感的程序中。 3、弱引用 当垃圾回收机制运行时,不管内存空间够不够,总会回收该对象占用的内存。 4、虚引用 完全类似于没有引用。主要用于跟踪对象原创 2017-05-25 22:44:30 · 210 阅读 · 0 评论 -
Activity生命周期总结
Activity生命周期:onCreate()、onStart()、onResume() 、onPause()、onStop()、onDestory() 1、当我们启动一个Activity,按下返回键时表明你不需要这个Activity了,一次执行onPause()、onStop()、onDestory()。 2、当按下home键或者活动页面出现对话框,表明暂时去做其他事情,等会可能还会回来。执行原创 2017-05-04 22:11:16 · 227 阅读 · 0 评论 -
访问控制级别
private—>default—>protected—>public default没有对应的访问控制符 private:当前类的访问权限,用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。 default:包访问权限,可以被相同包下的其他类访问。 protected:子类访问权限,可以被同一个包中的其他类访问,也可以被不同包中的子类访问。通常情况下,使用pro原创 2017-05-23 22:41:08 · 901 阅读 · 1 评论 -
SurfaceView与View——Android群英传
区别: View主要适用于主动更新的情况下,而SurfaceView主要适用于被动更新,例如频繁的刷新 View在主线程对画面进行刷新,而SurfaceView通常会通过一个子线程 View在绘图时没有使用双缓冲机制,而SurfaceView在底层实现机制中已经实现了双缓冲机制SurfaceView使用 1、创建SurfaceView 自定义的继承SurfaceView,实现两个接口的方法原创 2017-05-12 22:14:13 · 171 阅读 · 0 评论 -
单位转换
px转换为dip或dp值,保证尺寸大小不变 public static int px2dip(Context context,float pxValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(pxValue/scale+0.5f);原创 2017-05-12 21:16:37 · 168 阅读 · 0 评论 -
绘图——Android群英传
2D绘图基础 Canvas对象提供绘图方法: canvas.drawPoint(x,y,paint) 绘制点 canvas.drawLine(startX,startY,endX,endY,paint) 直线 DrawLines多条直线 canvas.drawRect(left,top,right,bottom,paint); 绘制矩形 canvas.drawRoundRect(left原创 2017-05-12 21:57:51 · 160 阅读 · 0 评论 -
Android Scroll——Androi群英传
1、layout方法 ACTION_MOVE中:layout(getLeft()+offsetX,getTop+offsetY,getRight()+offsetX,getBottom()+offsetY); offsetX,offsetY是偏移量 2、offsetLeftAndRight(offsetX)与offsetTopAndBottom(offsetY) 对左右、上下移动的API的封原创 2017-05-12 20:54:26 · 318 阅读 · 0 评论 -
成员变量和局部变量
成员变量: 实例变量(不以static修饰) 类变量(以static修饰)。 类变量从类的准备阶段开始存在,知道系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。 类.类变量 、 实例.实例变量 、实例.类变量。 当系统加载类或创建该类的实例时,系统自动为成员变量分配内存原创 2017-05-23 22:05:51 · 147 阅读 · 0 评论 -
做题笔记
gets是得到一整行的字符串; getchar是得到一个字符; scanf(“%s”)是得到一个连续的字符串,遇到空格、回车会自动终止。bash环境中:Ctrl+C–停止程序 Ctrl+Z–后台挂起查看本系统支持shell类型:/bin 二进制文件目录 /sbin原创 2017-05-23 21:29:03 · 328 阅读 · 0 评论 -
Android坐标系
View提供的获取坐标方法 getTop:获取到的是View自身的顶边到其父布局顶边的距离 getLeft(): ………………………………………………………………..左边 getRight():………………………………………………………….左边 getBottom:………………………………………………………..顶边MotionEvent提供的方法 getX():获取点击事件距离控件左边的距原创 2017-05-12 16:16:55 · 187 阅读 · 0 评论 -
ListView2——Android群英传
1、使用ViewHolder模式提高效率 在自定义Adapter中定义一个内部类ViewHolder,将布局中的空间作为成员变量。ViewHolder充分利用了视图缓存机制,避免每次调用getView使用通过findViewById()实例化控件。 2、设置项目间分割线 android:divider 设置颜色和高度 3、隐藏ListView的滚动条 android:scrollbars=原创 2017-05-11 22:47:27 · 303 阅读 · 0 评论