为了账号安全,请及时绑定邮箱和手机立即绑定

在未来执行 Runnables

在未来执行 Runnables

慕侠2389804 2022-05-12 19:01:29
假设我有一个 Activity,它的方法需要 JNI 库才能工作。JNI 库是在运行时加载的,因此我们有可能在 Activity 的 onCreate()、onResume() 中获得异常(例如重新启动应用程序后),因为库尚未加载。所以,我一直在想 - 如果我将包装在 Runnable 中的代码发送到某个类中,其中包含要执行的可运行对象列表,并且该类将接收加载库(或任何其他事件)的事件,从而执行 Runnables有可能的时候。我正在尝试使用 EventBus 来实现这一点,但总是有一个例外:E/事件:无法调度事件:com.vc.intent.EventAppStateChanged 类订阅类 com.vc.model.FutureExecutor但这些例外并没有告诉我太多。我怎样才能找出代码究竟在哪里中断?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

所以,这个想法本身还不错,只是我愚蠢的大脑xD。EventBust 没有显示导致异常的原因,所以我简单地将代码放在 try-catch 中:


public void onEventMainThread(EventAppStateChanged event) {

        if (event.isState(AppState.NORMAL)) {

            Log.i(TAG, "EventAppStateChanged (to NORMAL) received");

            try {

                for (Runnable runnable : toBeExecutedList) {

                    Log.i(TAG, "FutureExecutor executing Runnable: " + runnable);

                    VCEngine.getHandler().postDelayed(runnable, 10);

                    toBeExecutedList.remove(runnable);

                }

            } catch (Exception e) {

                Log.e(TAG, "FutureExecutor exception: ");

                e.printStackTrace();

            }

        }

    }

我发现我在 for 循环中删除了一个列表元素。这可以通过使用迭代器或在 for 循环后简单地清除列表来解决。现在它可以工作了。


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信