安卓事件传递机制分析 | Ohmer's Blog

作者:JerryXia | 发表于 , 阅读 (0)
这篇文章基于Android4.2的源码分析得出,写的比较早,拿出来晒晒。
这片文章讲解的事件传递的起源从dispatchTouchEvent(event)开始,根据事件的处理流程逐渐展开,直至事件被可预料的处理掉结束。
先贴一张个人总结的事件传递的流程图,如果可以将这张图清楚的理解,下面的文章就可以不用看了,因为这篇文章的主要内容也就是围绕这幅图展开。

ViewGroup中的事件处理在用户触碰屏幕后,经过系统一系列处理后,会分发到的View的dispatchTouchEvent方法中,事件将在这个方法中进行分发,决定该事件的去向。
由于安卓的事件处理顺序是由外至里的,既外层视图最先拿到对应的事件,既事件会优先传递到ViewGroup的dispatchTouchEvent方法中。在自定义视图中可以重写dispatchTouchEvent这个方法定义事件的进一步分发,本文分析的是ViewGroup默认的分发机制。
在ViewGroup中默认先将事件分发给onInterceptTouchEvent方法,通过该方法的返回来判断当前视图是否中断事件的进一步分发,如果onInterc...阅读全文

WeakHandler 是怎么解决 Handler 的内存问题的 | Ohmer's Blog

作者:JerryXia | 发表于 , 阅读 (0)
问题回顾内存泄露什么是内存泄露,请参考Java的内存泄漏
Handler内存泄露对于安卓的初学者,常见的handler的写法如下:
12345678public class SampleActivity extends Activity {  private final Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {      // ...     }  }}在上面的代码中,mHandler作为SampleActivity的内部匿名类的对象,持有对父类对象的引用。为了保证在子线程(一般是后台线程,可能比较耗时)能够通过Handler和主线程进行通讯,一般该子线程需要持有对应Handler的对象。因此,如上的代码即使SampleActivity被关闭,mHandler由于子线程的引用并不会被回收,同样mHandler厘面引用的SampleActivity对象也不会被回收(内存泄露)。
Runnable内存泄露在发起一个延时操作时,通常会这样写:
...阅读全文

优化 Gradle 编译速度实践 | Ohmer's Blog

作者:JerryXia | 发表于 , 阅读 (0)
随着项目规模越来越大,编译速度越来越慢,每次修改代码以后的编译都是痛苦的等待。对于兄弟们来说,gradle已经变成了一个潜藏的‘岁月神偷’。So,现在是时候我们来优化一下gradle的编译速度。
本文优化的实践主要是参考Android Weekly上推荐的一篇文章6 tips to speed up your Gradle build和gradle官方文档。
先看看我们都有神马方法可以用先:
Gradle DaemonGradle Daemon是gradle官方极力推荐的一个优化gradle编译速度的方法在1.0之前的版本就已经提供,经过这么多的版本迭代,已经非常成熟。如果你的gradle版本足够新并且没有开启Daemon的话,在你的编译完成之后,经常会看到这样一句话:
1This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.8/userguide/gradle_daemon.htmlGradle Daemon是一个长期生存(3个小时不被调用会...阅读全文

树莓派入手,无显示器远程操作 | Ohmer's Blog

作者:JerryXia | 发表于 , 阅读 (0)
烧录镜像文件在mac下可以参考Mac OSX下给树莓派安装Raspbian系统
在Windows下面的话直接使用Win32 Disk Imager进行烧录。
初始化系统操作激活root用户raspberrypi系统默认提供的用户为pi,密码为raspberry,so,第一步我们就是要激活root帐号:
1234// 设置 root 账号的密码sudo passwd root// 启用 root 账号登录sudo passwd --unlock root但是需要注意的是,root帐号启用后,默认不支持远程登录。
配置ssh key证书登录为了减去每次远程登录系统都需要手动输入密码,同样也更加安全,可以配置ssh key登录,ssh key的生成参考generating-ssh-keys
在服务端生成.ssh/authorized_keys文件
12mkdir .sshtouch .ssh/authorized_keys将本地的公匙复制到.ssh/authorized_keys文件中
1echo XXXX >> .ssh/authorized_keys #XXXX替换成对应的...阅读全文

树莓派安装 MySQL | Ohmer's Blog

作者:JerryXia | 发表于 , 阅读 (0)
然后安装
1sudo apt-get install mysql-server接着会提示你为root用户设置密码,并且确认密码。输入完成后,稍等mysql就安装完成。可以测试一下。
1mysql -u root -p然后输入刚刚设置的密码。
开启远程登录配置权限1sudo nano /etc/mysql/my.cnf找到下一行,并且将bind-address的值改成0.0.0.0
1bind-address = 0.0.0.0为root用户开启远程登录权限,并且限制在局域网内
1GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'password' WITH GRANT OPTION;重启MySQL服务
1sudo /etc/init.d/mysql restart打开3306端口最后用iptables打开3306端口
1iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT或者限定固定的ip才能访问
1sudo ipt...阅读全文