Android面试整理
2019-06-20 本文已影响52人
Anwfly
- RecyclerView的上拉加载、下拉刷新怎么实现?RecyclerView原生实现侧滑、拖动?
-
上拉加载、下拉刷新
总结:上拉加载更多功能实际上就是给RecyclerView增加一个FooterView,然后通过判断是否滑动到了最后一条Item,来控制FooterView的显示和隐藏。下载刷新同理。 -
侧滑和拖动:拖拽和侧滑删除的功能要借助
ItemTouchHelper
这个类,我们只需要创建出一个ItemTouchHelper
对象,然后调用mItemTouchHelper.attachToRecyclerView(recyclerView);
就可以了。
我们看一下ItemTouchHelper的构造方法,他需要一个Callback
public ItemTouchHelper(Callback callback) {
mCallback = callback;
}
这个Callback是ItemTouchHelper的内部类,所以我们需要写一个类继承自ItemTouchHelper.Callback ,然后重写里面的方法
- 数据的各种存储方式
(1)SharedPreferences。适用于保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息、解锁口令密码等。
(2)文件存储数据 。文件存储方式是一种较常用的方法,在 Android 中读取/写入文件的方法,与 Java 中实现 I/O 的程序是完全一样的,提供了 openFileInput()和openFileOutput()方法来读取设备上的文件。
(3)SQLite数据库存储数据。SQLite 是 Android 所带的一个标准的数据库,它支持SQL 语句,它是一个轻量级的嵌入式数据库。
(4)使用ContentProvider存储数据。主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此 Content Provider 的各种数据类型。
(5)网络存储数据。通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。 - 断点续传下载,续传上传
多线程下载的原理实际上与单线程下载的原理并无区别。
- 首先,多线程下载只需要确定好下载一个文件需要多少个线程,一般来说最好为3条线程,因为线程过多会占用系统资源,而且线程间的相互竞争也会导致下载变慢。
- 然后,下载的时候将文件分割为三份(假设用3条线程下载)下载。创建与下载文件同样大小的空壳文件RandomAccessFile,它的开始结束为止用以下代码
conn.setRequestProperty("Range", "bytes=" + start + "-" + end)
确定。 - 最后就是断点续传了,只需要才程序停止下载的时候记录下最后的下载位置就好了,当下次下载的时候从当前停止的位置开始下载。
-
app在断网情况下怎么保存用户信息(数据缓存)
Android客户端缓存机制是android应用开发中非常重要的一项工作了,使用缓存机制不仅可以为客户节省流量,同时提高了用户体验。分为文字缓存和多媒体文件缓存。
首先是文字缓存:将服务器交互得到的json数据存入sd卡中,并在数据库添加该数据的记录。添加数据库记录时,可以提供2个字段,请求到的Url和本地保存后的文件地址,每次加载数据之前都会根据Url在数据库中检索。
然后是媒体文件缓存:主要是图片三级缓存,现在流行的图片加载框架都支持三级缓存。如果是自己实现三级缓存,主要 用到的Lrucache。 -
Activity现场保存,现场恢复
- 现场保存:重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用。
- 现场恢复:通过重写 onRestoreInstanceState()方法可以从中提取保存好的数据