首页 > 解决方案 > 在方法 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() 运行。

标签: androidmvplifecycle

解决方案


就这样把你的initViews();里面success

@Override
protected void onStart() {
    super.onStart();

    loadCards(new Callback(){
        success(List<Card> cardList){initViews();}
        fail(){do other thing}
    });
}

推荐阅读