自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 生产者消费者

public class Test { public static void main(String[] args) { Godown godown = new Godown(30); Consumer c1 = new Consumer(50, godown); Consumer c2 = new Consumer(20, godown); Consumer c3 = new

2015-05-15 11:36:24 519

原创 Android窗口 dimiss失效问题 惨痛教训啊

最近在做一个TV项目,也是Android系统,界面问题可真是把我搞惨了。好多地方和手机还是差别蛮大的,一些手机上固有的经验不能直接移植过去。不扯闲话了。这两天遇到一个PopWindow、Dialog按了返回键不消失的问题。网上其实已经有了解决方案: popupWindow.setOutsideTouchable(true); // 为了保险起见加上这句 popupWind

2013-03-18 16:06:22 3052

原创 设计模式之--工厂模式

利用静态方法定义一个简单的工厂,常被称为静态工厂。缺点,不能通过继承来改变创建方法的行为。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类吧实例化推迟到子类。类图: 简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。 工厂模式例子:不同地域的比萨商店创建比萨。设计原则:要依赖抽象,不要依赖具体类。(依赖倒置原则)

2013-02-27 21:57:49 503 1

原创 设计模式之--命令模式

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。电器插板开关命令例子。类图:有的时候如果不想每次调用都判断对象是否为null,可以实现一个空对象(空对象本身也被视为一种设计模式)。命令模式可以增加undo方法,撤销操作(命令可能需要记录一些之前的状态)。多次撤销,用堆栈记录操作过程中的每一个命令。宏命令MacroC

2013-02-26 21:05:25 440

原创 设计模式之--状态模式

状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。类图: 如果使用继承定义了一个类的行为,你将被这个行为困住,甚至要修改它都很难(深有体会啊,离线文件打开和点播功能,哎~需要重构!)。我们把状态模式想成是不用在context中放置许多条件判断的替代方案。一般来将,当状态转换时固定的时候,就适合放在context中;然而,当转换时更动态的时候,通常就会

2013-02-25 22:38:16 342

原创 设计模式之--代理模式

代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图:远程代理。虚拟代理(作为创建开销大的对象的代表),CD封面异步加载例子。装饰者为对象增加行为,而代理是控制对象的访问。适配器会改变对象适配的接口,而代理则实现相同的接口。 动态代理之所以被称为动态,是因为运行时才将它的类创建出来。 类图《Head First 设计模式》474页。对象村约会系统

2013-02-24 12:16:31 387

原创 《代码整洁之道》--注释

别给糟糕的代码加注释,重新写吧。注释总是一种失败。注释不能美化糟糕代码。用代码来描述而不是注释。能用函数或变量时就别用注释。如果你发现自己想标记右括号,其实应该做的是缩短函数。源代码控制系统非常善于记住是谁在何时添加了什么,没必要用那些小小的签名搞脏代码。直接把带代码注释掉是讨厌的做法,别这么干!注释掉的代码堆积在一起,就像破酒瓶底的渣滓一般。交给优良的源代码控制系统吧

2013-02-01 23:00:45 407

原创 《代码整洁之道》--函数

函数的第一条规则是要短小,第二条规则是还要更短小。函数不应该大到足以容纳嵌套结构。函数的缩进层级不应该多于一层或两层。函数应该做一件事。做好这件事。只做一件事。如果函数只是做了该函数名下同一抽象层上的步骤,则函数还是只做了一件事。判断函数是否不止做了一件事,有一个方法,就是看能否再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。只做一件事的函数无法被合理地切分为多个区段。

2013-01-30 23:14:45 852

原创 Base64编码有时会默认换行

今天调协议的时候发现用Base64算法加密,当字符串过长(一般超过76)时会自动在中间加一个换行符,真尼玛蛋疼啊。这个问题困扰了一下午。用android.util.Base64.encodeToString加密时,多一android.util.Base64.NO_WRAP即可解决问题。再吐槽一句,迅雷专用链用的不是base64标准字符集。

2013-01-27 20:59:42 16414

原创 《代码整洁之道》-- 第2章 有意义的命名

如果名称需要注释来补充,那就不算是名副其实。不要使用魔数。别用accountList来指称一组账号,除非它真的是List类型。List对程序员有特殊意义,最好用accountGroup甚至accounts都会更好。单独的小写字母l和大写字母O作为变量名不合适,容易误导。做有意义的区分:Product类,ProductInfo或ProductData类,Info和Data就像a、an

2013-01-26 22:05:55 674

原创 Jni编程总结

Rather than writing a complex segment of native code manipulating the Javavirtual machine, it is often preferable to define an auxiliary method in the Javaprogramming language and have the native

2013-01-14 17:34:54 798

原创 设计模式之--迭代器与组合模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。类图:组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。类图: 组合模式以单一责任设计原则换取透明性,组合迭代器用stack实现,递归操作。空迭代器hasNext()永远返回false。组合和迭代器配合,考虑文件系统构建

2013-01-13 22:57:59 502

原创 设计模式之--模板方法模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。类图:模板方法模式的抽象类可以包含一些方法(钩子,为空或者默认实现的方法),子类可以视情况决定要不要覆盖它们。为了防止子类改变模板方法中的算法,可以将模板方法声明为final。android中Activity里的OnCreate、onResu

2013-01-13 14:34:21 410

原创 设计模式之--适配器模式、外观模式

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。  类图:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 类图: 适配器分为两种实现方式,对象适配器和类适配器,其中类适配器用到了多重继承。  装饰者模式   不改变接口,但加入责任适配器模式   将一

2013-01-13 13:45:40 406

原创 设计模式之--单例模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。类图:单例遇到多线程时会出问题,三种解决办法:    同步getInstance()方法 最直接的做法,如果没有性能考虑。    急切初始化  静态初始化实例。    双重检查枷锁  没有性能问题,java5以上版本,建议使用,虽然杀鸡用了牛刀。 第三种方法示例:public class SingletonK

2013-01-12 23:48:26 328

原创 设计模式之--装饰者模式

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更具有弹性的替代方案。类图:    装饰者和被装饰者必须是一样的类型,也就是有共同的超类。     java/IO用到了装饰者模式。缺点:利用装饰者模式,常常造成设计中有大量的小类,数量实在太多,可能会造成使用此API程序员的困扰。       装饰者模式可以和工厂模式配合,更好地解决问题。    举例时考

2013-01-12 21:06:15 327

原创 设计模式之--观察者模式

出版者 + 订阅者 = 观察者模式    观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。类图示例: java.util包里包含了最基本的Observer接口与Observable类,可以利用来实现我们自己的观察者模式。推送数据可以采用推(push)或拉(pull)的方式。观察者模式的代表人物MVC。 OO原则

2013-01-12 15:53:03 369

原创 Jni编程总结

Shared  stubs  may  be  suitable  for  leveraging  inherently  nonportablenative code that can tolerate a slight performance degradation, whereas one-to-onemapping should be used in cases where to

2013-01-08 17:50:51 489

原创 Jni编程总结

Passing NULL to DeleteLocalRef is a noop, which is an appropriate action if FindClass fails and returns NULL it is more efficient to check for the distinct error return value instead. If a JNIfunc

2013-01-07 20:13:25 1613

原创 Jni编程总结

.Unlike the situation with primitive array types, you cannot get all the object elements or copy multiple object elements at once use the javap tool  to generate  the  field  descriptors  from  cl

2013-01-07 15:54:24 598

原创 Jni编程总结

The second argument to a static native method is a reference to the class in which the method is defined. A pending exception thrown through the JNI does not automatically change control flow in nat

2013-01-06 14:11:58 359

原创 学习笔记--《Android内核剖析》Context

Context就是一个场景,一个场景就是用户和操作系统交互的一种过程。Activity和Service都是基于Context的,一个应用程序中Context个数 = Service个数 + Activity个数 + 1,最后一个1代表Application类本身也会对应一个Context对象。PackageInfo和Context.getResources()返回的Resource只有一个全局对象

2013-01-04 19:58:01 417

原创 学习笔记--《Android内核剖析》Framework概述

Framework框架包含三个部分,服务端、客户端和Linux驱动。服务端:包含WindowManagerService和ActivityManagerService两个重要的类,还有KeyQ类监听消息,InputDispatchThdread类分发消息给当前活动的客户端程序。客户端:ActivityThread为应用程序主线程类,程序的入口为该类中的static main函数,其所在的线

2013-01-04 17:49:45 987 1

原创 学习笔记--《android内核剖析》binder

Binder用于完成进程间通信(IPC),工作在Linux层面。Binder是一种架构,提供了服务端接口、Binder驱动、客户端接口三个模块。ServiceManager就像一个企业总机,管理各种各样的的Service,每一个Service内部持有一个远程服务的Binder引用。

2013-01-04 16:08:30 671

原创 如何在C里嵌入java虚拟机 编译和运行问题

最近一直在学习JNI编程,从java里调用native方法已经很熟练了,但是如何从C里完全重新创建一个JVM,进而通过JNI的借口调用java的函数呢?我的上一篇文章里提到了如何在64位win7下编译的问题,这里补充一点,在LIB环境变量里加入“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64”,确保可以找到64位的库。好了

2012-08-18 09:06:07 2311

原创 JNI编程 64位系统下的编译问题

又有一段时间没有更新博客了,今天提供的内容绝对是干货。对于换到64位系统的人来说,遇到编译问题一开始总会有些手足无措,不知道从何下手,甚至一度可能想换回32系统,因为之前一切明明都是ok的(哈哈,我就一度是这样想的)。不过今天我已经解决了这个问题,且听我慢慢诉来。        最最重要的问题是环境变量的配置。你首选需要将C:\Program Files (x86)\Microsoft Vis

2012-08-14 14:50:35 3411

原创 JNI编程

JNI编程简介:     JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在 native code 中嵌入 Java 虚拟机调用 Java 的代码。JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点:利用 na

2012-08-03 11:21:28 645

原创 javah 提取头文件注意事项 找不到类

hello,各位粉丝好!通过javah来提取.class文件的头文件,说来简单,其实要完全做好也不容易。 第一点,类名一定要是全路径,比如一个类名叫RemoteControl,实际全路径名字应为com.xxx.xxx.RemoteControl,如果直接javah RemoteControl,会提示你找不到该类。第二点,javah的环境变量一定要配置好,比如你的native函数里有

2012-07-10 20:05:45 2649 1

转载 android的selector,背景选择器的使用

selector的使用,注意默认图片项应该放到最后,否则Eclipse会报错,没搞懂...

2012-06-19 07:59:47 325

原创 TouchMe

激动,兴奋,有一种伟大的预感,我就这样上路咯。我的第一个正式android项目TouchMe已经开始了她的旅程。这是一个android手机软件,通过网络操作用户电脑上的文件,可以做一些简单的操作,比如删除、复制、新建文件,另外支持小文件在线浏览,大文件远程下载。话不多说,下面上图

2012-06-18 22:51:42 720 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除