android-funcall-in-main-thread-list arrange for the function func to be applied to the args on the Android main thread (which is the GUI thread too).
android-funcall-in-main-thread actually does it by consing func and args and calling
android-funcall-in-main-thread-list with the result.
android-funcall-in-main-thread-list is the "primitive" interface.
The invocation of the function is done by the event loop of the GUI thread, so it is synchronous with respect to processing events, in other words it will not happen in the middle of processing an event.
To allow for testing, these functions can be called on any architecture. On non-Android architectures, there is no "Android main process". In this case,
android-funcall-in-main-thread-list first tests whether the variable *android-main-process-for-testing* is non-nil (which value must be a process), and if it is sends func-and-args to this process by process-send. This is based the assumption that this process processes cons events by applying the
cl:car to the
cl:cdr, which is the "normal" behavior of the system event processing (that is, what general-handle-event does). If you set this variable, make sure that this process processes events in this way. If *android-main-process-for-testing* is
android-funcall-in-main-thread-list arranges for the idle process to apply the
cl:car to the
android-funcall-in-main-thread-list always queues the function, even if it runs on the main thread. If you need to execute immediately when running on the main thread, check first using android-main-thread-p.
LispWorks User Guide and Reference Manual - 13 Feb 2015