前记
对于一个Android开发,时不时会有这样的需求:想知道一个页面上的某些view元素是由哪些xml布局资源文件加载而来。如果这个页面是你开发的,那你应该很熟悉这其中涉及到的xml文件,你可以快速准确地找到它们。如果页面不是你开发的呢?幸运的话,你刚好认识相关的开发,而且TA的记性比较好,你可以直接询问TA资源文件名。然而现实是大多数情况下,你需要自己动手。寻找相关xml文件的过程并不总是简单省时的,于是我想能不能找到方法解决这个小小的痛点。
阅读全文
背景说明
为了使问题更加清晰,我将出现问题的场景进行简化抽象。现在有一个Activity
,其主体是一个ListView
。ListView
包含了多个模块,每个模块都对应着自己的视图。每个模块都实现了一个接口Section
:
public interface Section {
public View getView(int position, View convertView, ViewGroup parent);
}
ListView
的adapter的getView
会调用各个Section
的getView
来获取不同模块的视图。
现在有一个模块TestSection
对应的视图是一个横向的RecyclerView
,核心代码如下:
public class TestSection implements Section {
RecyclerView mRecyclerView;
public View getView(int position, View convertView, ViewGroup parent) {
if (mRecyclerView == null) {
mRecyclerView = new RecyclerView(parent.getContext());
mRecyclerView.setLayoutManager(new LinearLayoutManager(parent.getContext(), LinearLayoutManager.HORIZONTAL, false));
}
return mRecyclerView;
}
}
ListView
支持下拉刷新。刷新之后,ListView
会清除原有的所有Section
,然后根据新的数据创建新的Section
集合。而内存泄漏就在下拉刷新之后出现了!
阅读全文
背景介绍
我们团队在对app进行启动性能优化后一直在思考一个问题:有没有办法在开发的时候就能知道某次代码修改有可能影响启动性能。这样就不会导致在发现启动变慢后,再去花费大量时间排查问题。
解决方案
受dagger的启发,我有了一个想法:可以利用Java的Annotation
把跟启动有关的代码在编译时提取出来,放在一个文件中,同时将这个文件加入git版本管理。如此一来,只要查看这个文件的提交历史记录,我们就可以知道某一次的commit是否包含可能影响启动性能的代码了。这篇文章就是对我实现这个功能的概括总结。
阅读全文
我们使用RxJava时会将业务逻辑抽象成一条函数链。实际上RxJava中的各种事件(包括subscribe、onNext、onError等)也是沿着这条链条传递的。
阅读全文
RxJava简介
RxJava里的Rx是Reactive Extensions的缩写,起源于.NET。它是一种编程思想,巧妙地结合了观察者模式以及函数式编程,使得异步操作的代码写起来简单而清晰。现在有越来越多的语言实现了这种思想,比如RxJava、RxJS、RxSwift等等。这篇文章就基于RxJava,探究一下线程调度的实现。
阅读全文