02 2013 档案

摘要:package cn.sunzn.generic;/*** 泛型是提供给 javac 编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序的非法输入,编译器编译带类型说明的集合* 时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。对* 于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如,用反射得* 到集合,再调用起add方法即可。*/import java.util.ArrayList;public class GenericDemo { public sta.. 阅读全文
posted @ 2013-02-26 22:31 sunzn 阅读(499) 评论(0) 推荐(0) 编辑
摘要:Gson 相关 jar 包下载地址:http://code.google.com/p/google-gson/Gson 使用示例package cn.sunzn.gson;import java.util.ArrayList;import java.util.Collections;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.util.Log;import cn.sunzn.bean.Person;import com.google.gson.Gson;imp 阅读全文
posted @ 2013-02-19 14:25 sunzn 阅读(12126) 评论(0) 推荐(0) 编辑
摘要:package cn.sunzn.memoryleak;import java.util.Collection;import java.util.Collections;import java.util.HashSet;/*** HashSet 的底层是由 HashMap 实现的,HashSet 存储的值会被当作 HashMap 中的 Key 来存储同时* 这个 Key 会和一个固定的充当 Value 的值共同组成一个 Entry,这个 Entry 会调用 hashCode()方法* 计算出一个 hashCode 值作为这个 Entry 的属性。当存入下一个值的时候 HashSet 内部会计算 阅读全文
posted @ 2013-02-13 20:08 sunzn 阅读(3307) 评论(0) 推荐(0) 编辑
摘要:在进行程序锁开发的时候,我们会发现程序锁实现的核心难点是如何监视应用程序的启动,于是我们主要着手实现如何对应用程序的启动进行监测,这个功能的实现经历了三种方案的尝试,也符合我们实际开发中的思路,具体的实现过程如下:尝试方案一设想每个应用在启动的时候会发送一个广播,那么我们就能通过广播接收者来订阅这个广播从而达到监视应用程序启动的目的,于是我们在广播接收者的动作名称中去寻找这样的广播动作,但是很可惜系统并没有为我们提供这样一种广播。尝试方案二设想系统自身是否有一个服务对应用程序的启动做监视,如果这个服务里面的一个方法能够得到前台应用任务栈最顶端的 Activity,那么我们也能够达到监视应用程序 阅读全文
posted @ 2013-02-13 19:59 sunzn 阅读(13233) 评论(3) 推荐(2) 编辑
摘要:常驻型广播常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下: 非常驻型广播非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的... 阅读全文
posted @ 2013-02-13 19:49 sunzn 阅读(38579) 评论(4) 推荐(4) 编辑
摘要:算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。代码如下:package cn.sunzn.dichotomy;public class DichotomySearch { 阅读全文
posted @ 2013-02-13 19:42 sunzn 阅读(44399) 评论(3) 推荐(5) 编辑
摘要:为了便于理解先来看看没有加同步代码块的 2 组同样功能的代码在不同状态下的执行结果,下面看第一组:package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new Thread() { public void run() { while (true) { System.out.println("同步代码"); } ... 阅读全文
posted @ 2013-02-13 19:37 sunzn 阅读(13916) 评论(0) 推荐(1) 编辑
摘要:同步代码块比较经典的例子是火车站的售票员售票的过程,下面通过代码来分析同步代码块在这里面的作用。package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); }}class Tic... 阅读全文
posted @ 2013-02-13 19:29 sunzn 阅读(5036) 评论(0) 推荐(0) 编辑
摘要:并发线程之间的死锁通常发生在同步代码块的相互嵌套使用的过程中,下面先来看段代码:package cn.sunzn.synchronize;public class DeadLock { public static void main(String[] args) { final Object lock1 = new Object(); final Object lock2 = new Object(); /** 线程 0 **/ new Thread() { public void run() { ... 阅读全文
posted @ 2013-02-13 19:23 sunzn 阅读(1588) 评论(0) 推荐(0) 编辑
摘要:实际编程中如果我们要使用系统中未暴露的方法,我们可以通过反射来使用这些方法,但在使用过程中我们很难确定方法对用的参数类型,以下的代码可以帮你得到这些信息:package cn.sunzn.reflectcase;import java.lang.reflect.Method;public class GetMethod { public static void main(String[] args) { getMethodInfo("java.util.HashSet"); } /** * 传入全类名获得对应类中所有方法名和参数名 */ @Suppres... 阅读全文
posted @ 2013-02-13 19:17 sunzn 阅读(52237) 评论(3) 推荐(0) 编辑
摘要:创建快捷图标的方式在 Launcher 界面手工添加快捷图标通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标创建快捷图标的原理采用了 Android 系统的广播机制,发送一个广播,Android 系统的 Launcher 中的 InstallShortcutReceiver 在接收到这个广播之后,快捷图标就会被创建。创建快捷图标的权限参见:https://github.com/android/platform_packages_apps_launcher/blob/master/AndroidManifest.xml <uses-permission android:n 阅读全文
posted @ 2013-02-12 18:34 sunzn 阅读(5951) 评论(0) 推荐(1) 编辑
摘要:应用程序在运行过程中所需要的权限是被写在应用的 AndroidManifest.xml 下的,在 Android 中这些信息是被封装在 PackageInfo 中的,所以要获取权限的信息,我们就需要先获取到 PackageManager ,再通过 PackageManager 获取指定条件的 PackageInfo 信息,通过比对 PackageInfo 所携带的权限信息来判断对应的应用是否具有 Internet 的权限,判断应用是否具有其他权限同理。实现代码如下:public void getInternetAppInfos() { /************************ 获.. 阅读全文
posted @ 2013-02-12 13:26 sunzn 阅读(2965) 评论(1) 推荐(0) 编辑
摘要:CyclicBarrier 是 java.util.concurrent.CyclicBarrier 下的一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。先来看 CyclicBarrier 的 APICyclicBarrier(int parties, Runnable barrierAction) : 创建一个新的 CyclicBarrier,它 阅读全文
posted @ 2013-02-12 13:09 sunzn 阅读(455) 评论(0) 推荐(0) 编辑
摘要:什么是 JsonJSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据 阅读全文
posted @ 2013-02-12 11:43 sunzn 阅读(44606) 评论(3) 推荐(8) 编辑
摘要:网上关于 Androidpn 的文章不少,但是大都是基于应用层面来介绍这个开源项目的,今天我带大家从源码层面深入的分析 Androidpn 的内部结构,也算是对最近工作的一个总结吧,不多说,跟我一起看代码! 一、Androidpn 开源项目Androidpn 开源项目托管地址:http://sourceforge.net/projects/androidpn/Androidpn 开源项目自身描述:This is an open source project to provide push notification support for Android, a xmpp based notifi 阅读全文
posted @ 2013-02-04 10:17 sunzn 阅读(14847) 评论(8) 推荐(9) 编辑

点击右上角即可分享
微信分享提示