- 博客(99)
- 资源 (7)
- 收藏
- 关注
原创 Android事件的分发机制
PhoneWindow的结构Activity有一个PhoneWindow类型的成员变量mWindow,PhoneWindow是每一个Activity的主窗口类,PhoneWindow里面有一个DecorView类型的成员变量mDecor。 DecorView继承自FrameLayout,我们通过setContentView所设置进去的内容是在id为content的ViewGroup下的,这个Vie
2016-05-12 21:59:06
658
原创 Linux Shell文本处理命令技巧
原链接:http://www.vaikan.com/linux-shell-tips-and-tricks/检查远程端口是否对bash开放:echo >/dev/tcp/8.8.8.8/53 && echo “open” 让进程转入后台:Ctrl + z 将进程转到前台:fg 产生随机的十六进制数,其中n是字符数:openssl rand -hex n 在当前shell里执行一个文件里的命令
2016-05-07 23:30:43
487
原创 TintedStatusBar实践总结
Google官方在api21以前是不支持设置状态栏颜色的。在api19开始,我们可以设置window的FLAG_TRANSLUCENT_STATUS, 然后在Activity布局的最顶端放一个和状态栏等高的view实现但是这个方法有如下问题:1. 如果Activity布局中有底部的EditText,输入文字时,键盘弹出来,EditText却不会跟着弹起来2. 如
2016-02-05 23:00:51
754
原创 Android debug.keystore的key和密码
Keystore name: "debug.keystore"Keystore password: "android"Key alias: "androiddebugkey"Key password: "android"CN: "CN=Android Debug,O=Android,C=US"
2016-01-12 15:24:31
1009
原创 Java Native Interface笔记
最近在研究AndFix的动态更新原理,需要用到JNI,所以把JNI的基本知识点重新整理了一下,记录在这里,以免遗忘。教程地址:https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.htmlJNI数据类型:Java原始类型:jint, jbyte, jshort, jlong, jfloat, jdouble
2016-01-11 16:40:45
645
原创 find命令的-prune参数的使用
直接看例子: 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0、dir1和dir2 …等目录及dir00、dir01…dir10、dir11…等子目录。在当前目录下查找所有txt后缀文件find ./ -name *.txt2.在当前目录下的dir0目录及子目录下查找txt后缀文件find ./ -path './dir0*' -name *.txt3.在当前
2016-01-11 08:13:55
3156
原创 在OS X上 为什么su命令的password输入之后 总是提示Sorry?
默认情况下,OS X是不支持su命令的。相反,你应该使用sudo。sudo是允许用户以超级用户的权限执行操作的一个命令。如果要启用su命令,操作如下: sudo passwd root
2016-01-10 18:05:30
4223
原创 在一个FragmentTransaction中进行多个操作时的注意事项
在一个FragmentTransaction中进行多个操作时要注意一些事情: 比如在一个FragmentTransaction中先后执行以下操作: 1. add一个Fragment 2. hide这个Fragment 3. show这个Fragment如果我们在fragment的onHiddenChanged中做一些事情的话,我们会发现getActivity是为空的,为什么?请看以下代码:
2015-06-15 15:43:02
952
原创 Android的support v4中的Fragment的一个Bug
问题描述public class MatchFragment extends BaseFragment { public static final String TAG = MatchFragment.class.getSimpleName(); private FragmentManager mFragmentManager; public MatchFragment() {
2015-05-24 21:24:59
3397
原创 Android支持多屏幕尺寸和多屏幕密度
屏幕尺寸: 屏幕尺寸被分为small, normal, large, and extra-large四个类别具体每一个类别的物理尺寸的大小是多少呢? Google文档里面是这样说的:xlarge screens are at least 960dp x 720dp large screens are at least 640dp x 480dp normal screens are at l
2015-05-22 18:15:39
757
原创 Android Studio上打的包在arm64位机器上找不到对应的so库
现象描述 Android Studio打出来的包在64位机器上报以下 java.lang.UnsatisfiedLinkError: dlopen failed: “libfoobar.so”我们是在工程目录中将32位的so库拷贝到arm64-v8a中的原因分析 apk包在安装的时候,系统会把包中与自己的abi对应的lib目录中的so库文件拷贝到system分区中,32位机器中只有一个目录/s
2015-05-18 17:33:08
15263
5
原创 WebView回调所在的线程
WebViewClient和WebChromeClient是在主线程上被回调的 被@android.webkit.JavascriptInterface注解的JS回调是在JavaBridge线程上被回调的,所以在JSApi的接口中如果要操作UI,必须得把Runnable对象Post到主线程上执行
2015-05-14 11:30:55
2870
原创 Android Studio的Code Completion和代码格式化
Android Studio的Code Completion需要在Settings->IDE Settings->Editor->Other->Show quick doc on mouse move中进行设置关于Androd Studio的代码格式化,我用的是EclipseCodeFormatter这个插件,这个插件的下载地址是: http://plugins.jetbrains.com/plu
2015-05-04 13:39:14
2014
1
原创 Android Studio安装时的注意点
一定要准备VPN帐号,因为在第一次运行Android Studio的时候会下载以下的内容: 1. Fetching Android SDK component information 2. Setup Wizard - Downloading Components界面下面开始下载Andorid SDK(即使你安装的是带Android SDK的AS的安装包,如果它带的SDK版本不是最新的,在这个步
2015-04-22 20:59:18
841
原创 Android UI树的Layout原理
在UI树的任意一个节点,当它被它的父亲layout时,这个节点的layout方法被父亲调用:public void layout(int l, int t, int r, int b) { if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) { onMeasure(mOldWidthMeasureS
2015-03-19 20:21:33
854
原创 Android UI树的measure原理
我们来看FrameLayout的onMeasure方法:protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = getChildCount(); final boolean measureMatchParentChildren = MeasureSpe
2015-03-19 16:25:36
667
原创 Java NIO简单例子
例子如下:Selector selector;try { selector = Selector.open(); SocketChannel socketChannel = SocketChannel .open(new InetSocketAddress("192.168.91.109", 4321)); socketChannel.configu
2015-03-18 23:29:14
684
原创 关于消息服务的线程模型的讨论
目前的消息服务的线程模型是在单线程上面实现对socket的读和写,缺点是必须得以轮询的方式去查询是否有可读的数据,虽然轮询间隔时间为400ms,但是仍然占用了一定的系统资源解决占用系统资源的办法,最直接的是使用两个线程去分别处理socket的读和写,但是这个方式仍然比较原始,需要处理线程间的同步和互斥。如果采用mina的方式,因为mina是基于事件驱动的,所以比较方便,示例如下:IoConnecto
2015-03-18 18:24:17
392
原创 Android MessageQueue和Loop分析
我们首先来看HandlerThread的创建过程,public class HandlerThread extends Thread { @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) {
2015-03-17 15:37:53
745
原创 关于ThreadLocal
Thread-Local provides get and set access or methods that maintain a separate copy of the value for each thread that uses it, so a get returns the most recent value passed to set from the currently exec
2015-03-15 18:43:21
401
原创 JVM什么时候退出
在Java的官方文档中:http://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.1 有如下的描述: A program terminates all its activity and exits when one of two things happens: All the threads that are not
2015-03-15 18:03:45
1482
2
原创 Java并发编程实践阅读笔记
1. 在LazyInitialization中的竞争条件@NotThreadSafepublic class LazyInitRace { private ExpensiveObject instance = null; public ExpensiveObject getInstance() { if (instance == null)
2015-03-15 17:11:18
400
原创 Objective C的内存管理
Objective C提供了三种内存管理方式:1. “手工持有-释放”或者MRR2. “自动引用计数”或者ARC3. 垃圾回收的方式,此种方式只能在Mac OS下使用,iOS下是不行的错误的内存管理往往包括两类:1. 释放或者覆盖正在使用中得数据2. 不用的数据却不释放,从而导致内存泄露基本内存管理规则You own any object you
2015-03-11 14:22:50
463
原创 iOS开发学习零碎笔记
1. 如果在Xcode工程中删掉了一个文件,然后再新建一个与之同名的文件,那么在Build并部署到Simulator上运行时,新文件的效果并不会起作用,需要将Simulator里面的app删除,重新安装才可以2. 新建一个workspace,然后再将一个已经存在的工程的.xcodeproj文件拖入到workspace中,如果在工程导航栏中并没有显示工程的样式,就说明这个工程已经在另外的xcod
2015-03-11 09:48:03
350
原创 boost asio编程笔记
1. 传递给async_write的数据不能是在局部变量或在栈上分配的内存,否则会出错2. 在同一个线程上对同一个socket连续调用async_write方法时,从目前的测试来看,socket上传出去的数据并没有发生乱序,发出去的顺序是与async_write调用的顺序一致的。如果把一个包分成包头和包体,在包头的发送完成的回调里面再发送包体,会导致包头和包体中间可能会插入其他数据。
2015-03-11 00:19:34
589
原创 Android上的GIF图片缩放库的开发
最近在做Android上面的GIF图片的缩放的开发,Android原生的框架并不支持这个功能,使用BitmapFactory去解码GIF图片也只是把GIF图片的第一帧解码到Bitmap中而已。经过一定的调研搜索,我确定了有三种可行的方法:1. 使用Java版本的GIF解码器和编码器将GIF中的每一帧都解码出来,然后缩放,再编码到新的GIF文件中。2. 使用Android上面的Image
2015-01-19 14:26:51
3594
1
原创 Android Bitmap当ARGB格式的Alpha通道为0时,RGB值都为0
Android Bitmap当ARGB格式的Alpha通道为0时,RGB值都为0,这点在调用bitmap的createBitmap方法时尤其要注意,如果传入的int数组的的alpha数据为0,那么rgb值会被忽略掉。
2015-01-15 14:24:28
2629
原创 Java垃圾回收时避免内存碎片的方法
Compacting CollectorsCompacting collectors slide live objects over free memory space toward one end of the heap. In the process the other end of the heap becomes one large contiguous free area. Al
2014-12-05 20:38:41
1579
原创 Java的垃圾回收算法
直接上英文原文,以下摘自《Inside The Java Virtual Machine》Reference Counting CollectorReference counting was an early garbage collection strategy. In this approach, a reference count is maintained for each o
2014-12-05 19:01:12
423
原创 复习一下Android系统的启动过程
再次将Android系统的启动过程复习了一下linux启动后,会启动第一个用户级进程init(代码位置: system/core/init/init.c),init做的事情有很多,其中就包括了解析运行init.rc脚本。脚本中会启动一个叫做Zygote的进程(代码位置:frameworks/base/cmds/app_process/app_main.cpp),Zygote做的事情
2014-12-05 17:34:13
387
原创 linux中C程序的内存布局
个人比较懒,就不翻译了,直接上英文,来自于《Advanced Programming In The Unix Environment》1. Text segment, consisting of the machine instructions that the CPU executes. Usually, the text segment is sharable so that only a
2014-12-05 11:24:09
422
原创 管道使用注意事项
When using pipes, we must be careful to close unused descriptors in order to ensure that reading processes detect end-of-file and writing processes receive the SIGPIPE signal or the EPIPE error.
2014-12-04 17:11:28
639
原创 在Android 4.0以下机型上支持webp编码和解码
据说webp编码产生的文件大小要比jpeg小很多,但是webp在Android 4.0以下的机型上不被支持,所以这里采取的思路跟jpeg压缩的时候一样,将webp的库使用NDK移植到Android 4.0以下的机型上。第一步:使用NDK移植webp编码解码库webp的库源码下载地址:http://download.csdn.net/detail/lihuapinghust/8221
2014-12-03 18:29:39
2388
原创 android平台移植jpeg-turbo库达到减小jpeg编码体积的目的
我目前所从事的工作是做公司社交类APP的消息服务模块,其中有一个需求就是压缩传输的图片的体积,因为现在一般的手机拍摄的照片体积都在2M左右,所以想办法减小传输过程中的体积是非常有必要的。一般的处理过程是这样:设定一个固定的分辨率大小,比如960*960,图片解码成bitmap对象后,如果图片的宽或者高超出了960,那么就对宽和高进行等比例缩放,使得长的那一边刚好等于960,然后再进行j
2014-12-03 17:33:52
1644
原创 将Visual Studio下的Cocos2dx 2.2.3工程移植到Xcode下进行开发
Mac OSX的版本是OS X 10.8.5,Xcode的版本是5.1.1
2014-11-11 14:46:25
973
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人