android - 在方法 A() 在 onStart() 内完成后如何在 onResume() 内启动方法 B()
问题描述
如何在方法A()(工作线程)在onStart()内完成后在onResume()内启动方法B()(主线程)
我在 onStart() 中有 loadCards(),在 onResume() 中有 initViews()。
需要在 loadCards() 完成后运行 initViews(),loadCards() 是一个长时间运行的操作,并且有一个 callback()。
当前的问题是 initViews() 在 loadCards() 完成之前运行,因此获取一个空指针。
想要获得帮助:如何仅在 loadCards()(inside onStart) 完成后运行 initViews()(inside onResume)?
@Override
protected void onStart() {
super.onStart();
loadCards(new Callback(){
success(List<Card> cardList){do something}
fail(){do other thing}
});
}
@Override
protected void onResume() {
super.onResume();
//my problem is here:
//how to know if loadCards() has finished? then run initViews.
initViews();
}
public void loadCards(Callback callback) {
Runnable runnable = () -> {
//List<Card> cardList = get list from work thread;
mAppExecutors.mainThread().execute(() -> {
if (result == empty) {
callback.fail();
} else {
callback.success(cardList);
}
});
};
mAppExecutors.diskIO().execute(runnable);
}
void initViews(){}
预期:在 loadCards() 完成后,运行 initViews()。
实际:当 loadCards() 仍在运行时, initViews() 运行。
解决方案
就这样把你的initViews();
里面success
@Override
protected void onStart() {
super.onStart();
loadCards(new Callback(){
success(List<Card> cardList){initViews();}
fail(){do other thing}
});
}
推荐阅读
- docker - docker 检查,将字段键作为字符串返回
- dictionary - 导入'rxjs/add/operator/map';使用 AngularFirestore、AngularFirestoreCollection、AngularFirestoreDocument
- fortran - Fortran 参数不匹配
- mysql - 如何在分区内比较 MySql 中所有可能的值?
- r - R 上带有 ggplot2 的样本大小的次要 x 轴标签
- html - Flexbox:弹性流列;flex-basis 100% 在没有明确高度的情况下无法工作
- python - 在 Pandas DataFrame 中存储列表的替代方案
- python - 如何在 Azure 服务器上运行 Python 脚本?
- c - C中从客户端到服务器的消息
- javascript - 如何在电子邮件 js 集成中更改“到电子邮件地址”