Android内存泄露的排查

在一次项目开发中,测试提到了一个问题,在详情数据页左右反复滑动多次,页面会越来越卡顿,加载速度也会越来越慢,需要我排查一下问题。
由于这个详情数据页面是一个Fragment,数据量特别大,并且嵌套在ViewPage中可以左右滑动,并且ViewPage的页数可以非常多。那么首先想到的问题是ViewPage + Fragment,Fragment没有被正确回收导致的。
首先来排查下Fragment的生成逻辑:

1
2
3
4
5
6
7
8
@Override
public Fragment getFragment(Fragment fragment, int currentPage) {
DemoFragment fragment = new DemoFragment();
Bundle bundle = new Bundle();
bundle.putInt("page", currentPage);
fragment.setArguments(bundle);
return fragment;
}

AndroidStudio生成模板代码

由于我的项目是MVP分层架构的,其实分层架构本身是一个好事,结构清晰,代码的健壮性强,但是每次创建页面都需要生成四五个类,页面一多,就要重复非常多次,这样的效率太低了,那有没有什么办法可以一次性,将样板代码生成好呢?

答案当然是有的,注意过么,每次我们通过AndroidStudio创建一个新Activity的时候,是会生成完整Activity模板代码的,那么我们是否可以自定义这个行为呢?

可以的!方法如下:

首先进入到AndroidStudio软件目录下android-studio\plugins\android\lib\templates\activities\,这里面可以看到很多熟悉的名字,这就是平时使用的模板的存放位置。

在这里可以建立一个模板文件夹,举例为MVPActivity。也可以复制一个模板以此为基础修改。

Android指纹识别功能的接入

在指纹识别手机没有大规模普及之前,许多app提供了使用手势密码进行快速登录或解锁的功能。但是在指纹识别大规模普及的今天,安卓的许多app还是仅支持收拾密码登陆功能,一方面是出于安全性的考量,另一方面是出于对适配兼容的担忧。一但用户进行了Root的操作,那么指纹识别的结果将变得不可信。

最近在寻找市面上常用的密码本软件的时候,发现大部分指纹密码软件支持通过生物识别解锁app。也许是指纹识别的兼容支持变好了?查阅资料发现,安卓对指纹识别的功能进行过封装,使用FingerprintManagerCompat可以轻松对指纹识别进行对接操作。身边8台不同品牌和版本的测试机,都可以正常的使用指纹验证功能。

但是由于Android统一封装指纹功能是在Android6.0后才加入的,这里也只对6.0以上的版本进行指纹识别功能适配。

那么来看一下指纹识别该如何去实现和接入吧。这里为了方便接入,讲指纹识别的全部功能,封装到了一个Dialog中,当打开次dialog时,就可以进行指纹识别了。

解决EditText中InputFilter与联想词输入法冲突

这一天,产品提出了一个神奇的需求:用户姓名设置框限制,允许最多8个汉字或16个英文字母或数字。
简单来说就是长度限制最大为16个字符,一个汉字认为是两个字符。虽然其实跟用户解释一个汉字等于两个字符这件事情是很奇怪的,但是毕竟是需求,我们来实现一下吧。

首先简单说一下要求:

  • 只允许输入数字汉字或英文字母
  • 输入限制为最大16字符
  • 汉字计为2字符,数字和英文计为1字符
  • 当输入超过16字符时(如拼音输入法一次性输入多个文字),输入内容截取到最大部分

多EditText页面如何清除输入焦点

开发中,如果需要清空EditText的输入焦点,一般情况下都需要使用EditText.clearFocus()
但在当一个页面中有多个EditText输入框时,clearFocus有时却无效,清空焦点之后,焦点会重新回到第一个EditText。
那么是不是说明clearFocus在多EditText情况下无效呢?

Android嵌套滑动的处理

开发中,遇到了一个非常复杂的页面。

最外层是一个ViewPager,内层一个ScrollView,上方是主内容部分的Layout,下方是一个可以悬停的Tabbar,以及一个ViewPager,下方ViewPager中还有ScrollView和RecyclerView,并且继承了上拉加载控件SmartRefreshLayout。

由于嵌套了太多的滚动,此时在滑动时出现了非常多不跟手的问题。甚至有时出现内层可滑动,但是外层还没有滑到底,滑动非常不连贯。为了解决这个问题,这次使用了v4包中的NestedScrollView,它可以很好的帮助我们解决滑动问题。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×