- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 写文件
// File file = new File(mAppContext.context.getExternalFilesDir(null), "original.txt");// try {// String data = currentLocation.getLatitude()+","+currentLocation.getLongitude()+","+curren
2016-03-28 10:33:30
463
原创 android.net.http.AndroidHttpClient Android6.0 API23以后失效
在android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类推荐使用HttpUrlConnection,如果要继续使用需要Apache HttpClient,需要在eclipse下libs里添加org.apache.http.legacy.jar,android studio里在相应的module下的build.gradle中加入:android
2016-03-23 14:53:16
4052
原创 android应用程序中对于ANR主线程超时不响应导致强制关闭的解决方案
ANR(Application Not Responding)定义在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框
2016-03-11 14:50:49
3790
原创 xxx.so has text relocations. This is wasting memory and is a security risk. Please fix
最近使用jni编译so文件,发现在android M中将之前一直视为warning的text relocation升级为了error ,直接导致system.load so文件的时候失败。翻了网上各种资料,关于text relocation的解决办法总结了一下:这个错误的主要原因是加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个
2015-09-02 10:42:10
8705
原创 Android中创建Message两种方法比较,new Message和obtainMessage
尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。让我们来看一下Message中obtain的源码:/** * Return a new Message instance from the global pool.
2015-09-02 09:51:55
1689
原创 反射调用android系统级API函数
try { Class mClass = Class.forName("com.android.server.wifi.WifiSettingsStore"); Constructor con=mClass.getDeclaredConstructor(Context.class); if(!con.isAccessible()){ con.setAccessible(t
2015-08-19 14:13:32
3211
1
原创 【笔记,待修改】关于设计模式的总结
1、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。比如我创建一个cache接口,要求实现序列化和反序列化方法。2、桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。比如我发布一个aidl的接口,其实现都有service的stub去实现。3、适配器模式将一个类的接口转换成客户希望的另外一个接口。比如日历提供一个管理类
2015-04-20 15:08:32
385
原创 指数退避算法exponential back-off algorithm
在很多场景下,我们都需要解决一些诸如轮训这样的问题。如果这样的算法出现在app上,这种轮训对于app性能和电量的消耗都是个巨大的灾难,那如何解决这种问题呢?app在上一次更新操作之后还未被使用的情况下,使用指数退避算法exponential back-off algorithm来减少更新频率。这里我们介绍下指数退避算法。SharedPreferences sp = context.ge
2015-04-20 15:03:00
2530
原创 java集合包List、Set、Map总结
1、List List包含ArrayList、LinkedList、Vector、Stack 需要注意到是Vector是基于synchronized实现的线程安全的arrayList,Stack继承自Vector,提供了LIFO的弹出和压入操作,提供了push、pop和peek操作。2、Set Set 包含HashSet和TreeSet。Set是不允许重复元素的,因为Has
2015-04-18 16:55:16
602
原创 多个线程同时开始启动计时框架的设计与实现
在DEMO测试中,我有个需求描述如下:线程A、B、C、D,我需要他们同时开始运行,并记录这四个线程全部完成所需要的时间。这个借助synchronizer可轻松完成。这里我们使用CountDownLatch来实现,该方法的详细描述参见我的上篇博文:点击打开链接核心代码如下:demo请参见github /** * @param args * @throws Inte
2015-04-17 16:41:27
798
转载 线程使用中的暂停,建议优先使用TimeUnit类中的sleep()
TimeUnit是什么?TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),
2015-04-17 16:06:46
3728
原创 Java中合理的停止掉一个线程thread
1、第一种也是最常用的一种就是使用状态位public class Task extends Thread { private volatile boolean flag= true; public void stopTask() { flag = false; } @Override public void run
2015-04-08 11:45:58
1268
转载 java 多线程之CountDownLatch用法
public class CountDownLatchDemo { final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) throws InterruptedException { CountDown
2015-04-06 21:03:55
705
原创 java object的wait和Thread的sleep方法区别
一、这里先来介绍下object的wait、notify和notify all方法wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。wait();//方式1:this.wait();//方式2:super.wait();//方
2015-04-06 20:50:13
760
转载 Lock与synchronized 的区别
原博文来自 http://houlinyan.iteye.com/blog/1112535我参考该blog并做了整理总结1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定, 如果使用
2015-04-03 13:51:57
542
原创 android中的内存泄露查找与常见的内存泄露案例分析
常见的内存泄露查找方法请参见:http://hukai.me/android-performance-patterns/这篇文章是google发布的android性能优化典范示例,对于渲染、内存GC与电量消耗都做了好的示范。这里我总结了下,android中常见的内存泄露1、类中调用registerReceiver后未调用unregisterReceiver().在调用reg
2015-04-03 11:40:29
1246
原创 android中强行停止(forceStopPackage)对alarmManager、Receiver的影响
背景之前给手机淘宝做了个准点提醒的中间件,类似闹铃提醒,使用sqlite和alarmManager两个组件实现,最近发现在MIUI上大量用户反馈提醒收不到,所以查了两天原因,把这个问题总结下以备后人参考。场景再现在说这个问题之前,先来说下MIUI奇葩的清理机制,没错,MIUI用户长按home键的那个清理过程,执行的是forceStopPackage操作。那么执行forcestop之后,
2015-03-11 17:23:04
5981
原创 【IOS】无缝桥接
Foundation框架定义了各种collection对应的Object-C类,相似的是CoreFoundation同样定义了一套C语言的API。NSArray与CFArray,这两种创建数组的方式可能有差别,但是有种强大的功能可以在两个类型之间平滑切换,这就是今儿要讲到的无缝桥接 toll-free bridgingARC的诞生大大简化了我们针对内存管理的开发工作,但是只支持管
2015-02-12 19:29:04
744
原创 【IOS中的系统框架】
在讲系统框架之前,我们先来普及下基础知识:1、动态库与静态库的区别:静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。2、ios中的框架将一系列代码封装成 动态库,在其中放入描述其接口的头文件,这样做出来的东西叫做框架。有时为ios平台构建的第三方
2015-02-12 19:10:10
390
原创 android中通用拒绝服务漏洞
该漏洞的描述见链接文章:http://www.cnxhacker.com/2015/01/07/5603.html主要的原因是使用了Intent中getSerializableExtra() 的API,如果攻击程序使用了app未定义的序列化类,该方法抛出异常,如果未捕获该异常,则导致应用不断crash。如果Activity不需要对外暴漏,则将exported置为false即可。此外,就是针对A
2015-02-10 14:41:03
1728
原创 ios中frame与bounds区别
在iOS开发中经常遇到两个词Frame和bounds,本文主要阐述Frame和bound的区别,尤其是bound很绕,很难理解。一、首先,看一下公认的资料先看到下面的代码你肯定就明白了一些:-(CGRect)frame{ return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size
2015-02-03 14:29:05
749
原创 关于CALayer的学习笔记
这篇博文写的非常好,我就不重复造轮子了!http://www.cnblogs.com/wendingding/p/3800010.html这里只把重要的笔记记录一下。1、在ios中所有看的见摸得着的都是UIView,比如按钮、Lable、图标等,UIView之所以能显示在屏幕上,是因为内部的一个图层,创建UIView对象时,会自动创建一个CALayer对象。@property(no
2015-02-02 16:34:21
361
转载 iOS开发UI篇—CAlayer层的属性
iOS开发UI篇—CAlayer层的属性一、position和anchorPoint1.简单介绍CALayer有2个非常重要的属性:position和anchorPoint@property CGPoint position;用来设置CALayer在父层中的位置以父层的左上角为原点(0, 0) @property CGPoint anchorPoint;称为“定
2015-01-30 15:55:53
300
原创 object-c基于块的遍历方式
NSArray *anArray=/*...*/;[anArray enumerateObjectUsingBlock]: ^(id object,NSUInter idx,BOOL *stop){ // do something if(shouldStop){ *stop = yes; } }];在当前
2015-01-29 21:14:12
591
转载 __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。但是像我这种Java基础本身就不牢固,做了两年的iOS已经习惯手动管理内存的半吊子,使用ARC还是经常碰壁。最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__br
2015-01-26 15:21:19
485
原创 nonatomic,assign,copy,retain的区别
nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。 (atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所 以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatom
2015-01-26 14:24:24
478
翻译 HTTP Header 详解
HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。首先传递message-header,即httpheader消息 。http header 消息通常被分为4个部分:g
2015-01-12 15:09:49
397
原创 id ,NSObject, id<NSObject>区别
我们经常会混淆以下三种申明(我是没有留意过): 1. id foo1; 2. NSObject *foo2; 3. id foo3; 第一种是最常用的,它简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查。但也因为是这样,你可以发送任何信息给id类型的对象。这就是为什么+alloc返回id类型,但调用[[Foo alloc]
2014-12-04 11:42:03
301
转载 你了解Java中String的substring函数吗?
Java中的substring函数是我们经常使用的一个函数,用来截取当前字符串的子串,定义如下:public final class String{ public String substring(int beginIndex); public String substring(int beginIndex, int endIndex);}使用及声明都非常简单
2014-10-22 15:47:43
480
原创 关于git中使用gitignore创建过滤规则的使用方法
在进行协作开发代码管理的过程中,常常会遇到某些临时文件、配置文件、或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push,这样会引起开发上的不便。Git可以很方便的帮助我们解决这个问题,那就是建立项目文件过滤规则。git中提供两种过滤机制,一种是全局过滤机制,即对所有的git都适用;另一种是针对某个项目
2014-10-08 10:59:20
1126
转载 图解TCP-IP协议
本文通过两个图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。如图1所示,给出了TCP通信过程的示意图。图1 TCP 三次握手四次挥手图1主要包括三部分:建立连接、传输数据、断开连接。1)建立TCP连接很简单,通过三次握手便可建立连接。2)建立好连接
2014-09-25 11:06:54
401
原创 android中的线程使用与通信机制
1、android的所有应用程序组件,包括Activity、Service和BroadcastReceiver都在应用程序的主线程中执行,所有的耗时处理都可能阻塞其他组件,所以所有的耗时处理和IO操作都应该从主线程移到一个子线程中。常见的如:文件操作、网络查找、数据库事务和耗时复杂计算。2、关于Android ANR,Activity对于一个输入事件(例如,按下一个按键)在5s的时间内没有
2014-09-17 09:57:35
583
翻译 从JVM并发看CPU内存指令重排序(Memory Reordering)
这两天,我拜读了 Dennis Byrne 写的一片博文?Memory Barriers and JVM Concurrency (中译文?内存屏障与JVM并发)。文中提到:对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存(caching)能够从数量级上降低内存延迟的成本这些缓存为了性能重新排列待定内存操作的顺序。也就是说,程序的读写操作不一定会按照它要求处理器的顺
2014-09-14 14:17:31
371
原创 android NDK 使用JNI实现与原生代码通信
1、关于原生代码的声明/*静态native方法声明*/public static native String stringFromJni();/*native方法声明*/public native String stringFromJni();2、原生方法实现这两种方式在实现上会有略微不同用javah的命令行工具生成的头文件,分别为jString Java_com_example_h...
2014-09-11 18:58:29
834
原创 effective java中的单例模式创建实例
public classSynWithServer {private ScheduledExecutorServicescheduler = null;privatestatic classSingletonClassInstance { privatestatic finalSynWithServer instance =new SynWith
2014-06-19 14:23:30
491
用初学者的思路来引导初学者 一天学好Linux下的软件安装
2009-09-27
VC++MFC教程全解
2009-03-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人