一次Android相册的开发日志记录 Day3

在开发阶段进入到Day2之后,工作开始变得繁忙了起来,加之生活上也有许多琐事要安排,导致相册开发进度陷入停滞。
但是与此同时,群晖的DSM7.0正式版发布了,跟随着新系统到来的,是Moments和DSPhoto两个相册软件废弃,随之而来的是整合了两者功能的SynologyPhoto,
于是我升级了并体验了一波,UI风格也与时俱进,同时整合了Moments和DSPhoto的优点,可以时间轴、文件夹、相册、多维度的管理照片,网络连接也稳定了非常多,这基本就是我想要实现的。但是还是有小遗憾的,文件夹视图模式下,仍然和DSPhoto一样,只有两列,在图片数量巨多的时候,查找就变成了一个很痛苦的事,这也是阻挠我使用这个作为相册系统的一个重要因素。

但是!等等!是不是只有这一点不满意?那么…我如果能修改一下APP,让他变成3列呢?

说干就干,试试看。

一次Android相册的开发日志记录 Day2

初步定好方案之后,我们先来实现一个基本的相册app。
一个基本的相册APP总共由3个页面构成:

  • 相册文件夹页面
  • 照片列表页
  • 照片详情页

在页面展示之前,首先我们要能拿到数据,这里我们使用MediaStore来获取用户的媒体信息。
MediaStore记录了用户的各种类型的文件位置,并保存到数据库中名称为external.db

一次Android相册的开发日志记录 Day1

我实在受够啦!!!!
这个市面上就没有简单好用的相册管理软件了么!!!
尝试了我能找到的市面上所有的相册管理软件,没有一个能完全做到我想的样子。
手机自带的相册软件+云同步确实可以在单个或同品牌手机内,完成我想要的需求,但是我手上的设备众多,每次更换设备不一定会使用原品牌,那么这就变得非常的麻烦了。

我的需求实际相对简单:
1.相对可用的UI,比如三星相册,小米相册
2.照片存储在服务器上,本地只缓存缩略图,只有用到的时候展示全图。
3.支持文件夹管理,这个非常关键。并且对应在服务器的文件目录结构要一致。
4.支持隐藏显示部分相册,保护隐私。
5.支持文件夹->远程文件夹的定向同步(单向或双向)

但是同时满足这些点的相册,或多或少都有些问题。

Android打印日志到文件

项目遇到一个问题需要排查,由于是偶现的问题,所以需要打印特定的日志并保存下来,但是并不需要将所有的Log都保存下来,
那么就需要一个小工具来解决这个问题了。

逻辑也很简单,当需要写入日志时,调用函数进行写入即可。简单封装下的代码如下,便于使用。

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。也可以复制一个模板以此为基础修改。

Your browser is out-of-date!

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

×