将来执行可运行对象

时间:2019-01-19 15:46:31

标签: java android

让我们假设我有一个Activity,该Activity包含需要JNI库起作用的方法。 JNI库是在运行时加载的,因此我们有机会在Activity的onCreate()和onResume()中获取异常(例如,在重新启动应用程序之后),因为尚未加载库。所以,我一直在想-如果我在某个类中发送包裹在Runnable中的代码,并附上要执行的Runnable列表,并且该类将接收到已加载库的事件(或任何其他事件),从而执行Runnables在可能的情况下。我正在尝试使用EventBus实现这一目标,但始终有一个例外:

  

E / Event:无法调度事件:类   com.vc.intent.EventAppState更改为订阅类class   com.vc.model.FutureExecutor

但是这些例外并不能告诉我很多。我如何找出代码在何处中断?

1 个答案:

答案 0 :(得分:0)

所以,这个想法本身并不坏,那只是我愚蠢的大脑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循环后清除列表来解决。现在就可以了。