问题:
1、C、S任意一端可连续接收信息吗
2、如何自动监听对端信息到来
3、如何不阻塞IO实现循环
4、在不阻塞IO的情况下实现任意发送或接受信息
5、内部类持有外部类引用--线程中有一个内部线程类(runnable),两个线程共同持有一个对象的情况
6、第一次文件接收后,点击列表时后续 Message发送接收不到;
7、mInputStream!!.read(bytes)循环最后一次时会阻塞
8、socket是单通道吗?socket能实现同时下载多个文件吗?
client 功能:
文件上传与 下载;<done
查看连接的其它客户端;列表--IP等信息(单独一页);<done>
下载与上传时弹框显示进度条,结束时 提示 ‘叮’;<done>
本地文件操作--删除、执行、进入文件夹等<done>
将连接转至 前台service 或者 开多进程--实现IPC 等
多进程使用 AIDL 或者 Messenger实现通信<done
本地使用 binder 返回 Service实例调用service方法,service通过回调接口返回结果<done
结束进程;
先实现功能 后期 优化 服务;
读文件 结束符为 -1
未解决问题:
高版本文件权限问题(>6.0)<done
uri识别问题:media、document、content、file 等, content//.../raw:/...奔溃<done>
server端接收文件到一半时停止了<
多进程服务端以外断开后的重连、界面处理等
一、订阅-发布模式实现:<br>
1、当有Client端连接时,通知所有用户--用户信息;
2、当有Client端断开连接时,Server自动感知到,并通知所有已连接用户;
(使用静态方法?可全局调用,连接用户静态保存)
3、多线程间的订阅-发布;
二、多线程:
1、数据同步?
三、流程:
1、根据Client端发送过来的指令 进行下一步;
如:(发送还是读取文件,或者是发送一个指令)
2、
Client端:
一、流程:
1、根据App界面操作发送对应指令至Server端;
如:(我要发送文件还是我要接受文件,然后根据对端指令进行下一步操作)
2、
二、App功能:
1、Server端的连接信息输入功能--IP、端口;
2、连接状态显示;
3、在特定状态下可进行的操作和可使用的功能;
4、列表展示--历史文件(数据库保存信息);
5、文件查看功能--跳转至文件夹;
6、其他。
三、指令:
1、server-list:server端指定文件夹下的文件列表;
(client发送list指令至server,server回送list json)
2、
库:gson
json转换时泛型擦除问题:解决(传递类型)
Android开发通用框架设计思路(MVVM):
一、框架引用:
MVVM框架:DataBinding(数据绑定)、LifeCycle(生命周期)、LiveData/RxJava(数据)、
ViewModel、Room(数据库)、Paging(分页) 、WorkManager(工作排程)、Glide(图像)、
Retrofit(HTTP)、RxPermission(权限) ...
二、网络封装:
Retrofit CallAdapter.Factory封装:
1、onStart 网络请求前(考虑多个接口同时请求的情况下loading框的显示)
2、loadAllComplete 请求结束后(包括请求成功、失败、服务异常、网络异常等情况后调用,考虑
多个接口全部返回后再取消loading框,其他情况...)
3、onNetError 网络异常情况,IO异常算netError?(考虑网络异常时的界面显示处理,
Toast提示等场景;有多个接口同时请求时的问题,异常统一处理、单独处理等)
4、onServerError (500 >= code < 600) 服务异常(考虑服务端异常时界面处理,Toast提示等场景;
有多个接口同时请求时的问题,异常统一处理、单独处理等)
5、onClientError (400 >= code < 500) 客户端异常(考虑客户端异常时界面处理,Toast提示等场景;
有多个接口同时请求时的问题,异常统一处理、单独处理等)
6、onSuccess 请求成功(接口请求成功的处理,包括有无数据返回等等情况)
7、onCookie cookie处理
8、unexpectedError 未知异常(除了IO异常和上述已知 code的情况)
9、onCancel 取消网络请求(包括主动取消、Activity销毁时取消等情况,可防止Activity泄漏等)
session??
三、MVVM架构模式封装:
1、分层:
View层:Activity、Fragment等内容显示;
--View:持有ViewModel、DataBinding
Module层:
--数据类(bean)
--数据源(Repository):包括网络数据、本地数据,以LiveData通知界面更新
ViewModel层:
--ViewModel(枢纽):处理数据的获取(Repository)与分发(LiveData)
--DataBinding(ViewModel):处理数据的双向绑定
2、生命周期控制:
使用LifeCycle将生命周期相关业务分离出去(比如:监听器的绑定解除等);
3、ViewModel:
生命周期敏感库:在横竖屏切换等 savedInstanceState的情况下不用处理处理
4、Base封装:
列表页base封装;
将数据请求页面相关的回调封装到DataBinding的ViewModel中???
savedInstanceState,ViewModel不能处理的数据的处理
5、动画:
6、ImageLoader:
7、工具类:
Format、Convert、Check、Net、SharedPreference、Span、App等
8、依赖注入:使用Kotlin
9、换肤:
10、回调函数:
11、字体适配:SP适用于字体大小跟随用户字体大小设置。DP,一些特殊情况,不想跟随系统字体变化,可以使用DP。