写在前面:
开发实现有千千万万种,但是好的代码结构,会带来清晰的逻辑和更优的性能
1.数据与布局异步加载
public class
MyListAdapter {
private
Context
context
;
private
ArrayList<String>
groupList
=
new
ArrayList<String>();
public
MyListAdapter(Context context) {
this
.
context
= context;
}
public void
setData(ArrayList<String> data, ArrayList<List<String>> datas){
this
.
groupList
.addAll(data);
notifyDataSetChanged();
}
adapter
=
new
MyListAdapter(
mContext
);
Observable.
create
(
new
ObservableOnSubscribe<String>() )
.subscribeOn(Schedulers.
io
())
.observeOn(AndroidSchedulers.
mainThread
())
1 适配器Adapter 可以先初始化,并setAdapter 给到View 布局
2
此时Activity 已经可以完成加载和显示
3 通过rx 异步在io线程中取得数据(网络/数据库/文件),在得到数据后,setData完成界面刷新
特别注意:
界面启动慢,打开慢,绝大部分是数据读取导致
,比如读取数据库100条数据,基本可以感受到卡顿,或点击无反应/或启动白屏。异步的加载模式可以过滤掉此问题
2.启动页主题
<
style
name=
"LaunchTheme"
parent=
"AppTheme"
>
<
item
name=
"android:windowBackground"
>@drawable/bg_launch</
item
>
</
style
>
setTheme(R.style.
AppTheme
);
setContentView(R.layout.
activity_launch
);
1 配置manifest的主题window背景,APP启动时,Activity加载前就不是白屏,而是图片
2 如果Activty 需要在Activity加载后,布局有其它效果,可以在setContentView 之前,手动更换主题,避免window背景图的影响。
特别注意:特别建议Launcher页 设置主题背景,避免长时间白屏
3.经典的MVP模式
public interface
HomeContract {
interface
View {
void
showResult(String result);
}
interface
Presenter {
void
getData();
}
}
1 接口HomeContract, 抽象出view的显示,和presenter的动作
2 代理HomePresenter执行接口Presenter, 处理数据获取,
建议此处定义和初始化 helper和list数据对象,完全代理托管
3 视图HomeActivity执行接口View, 处理交互与显示
建议此处只定义控件View,adapter对象
(三大部分各自执行函数,和保留对应的数据,从结构上将代码块分开)
特别注意:adapter 和 list数据的处理,建议不要重复定义和存放