# Scheduling RPCs Example This example shows you how to use `scheduleRpc` which is built into Mobly snippet lib to handle RPC scheduling. ## Why this is needed? Some tests may need a snippet RPC to execute when the snippet client is unable to reach the device, e.g., performing test actions while USB is disconnected. For example, for battery testing (with Monsoon devices), we may want to measure power consumed during certain test actions (e.g., phone calls). However a Monsoon device turns off USB during battery data measurement, and a regular snippet RPC won't work when the client is not connected to the device. Therefore, prior to starting the Monsoon measurement we need to schedule a phone call RPC prior to soccur during the measurement period. In this scenario, the test steps would be: 1. Schedule the `makePhoneCall('123456')` to execute after (e.g., 10 seconds): s.scheduleRpc('makePhoneCall', 10000, ['123456']) 2. Start a Monsoon device to collect battery data, while simultaneously USB is turned off. 3. After 10 seconds, the phone call starts while USB is off. 4. Finally, after the phone call is finished, Monsoon data collection completes and USB is re-enabled. 5. The test retrieves any cached events or data from the device. See the source code ExampleScheduleRpcSnippet.java for details. ## Running the example code This folder contains a fully working example of a standalone snippet apk. 1. Compile the example ./gradlew examples:ex5_schedule_rpc:assembleDebug 1. Install the apk on your phone adb install -r ./examples/ex5_schedule_rpc/build/outputs/apk/debug/ex5_schedule_rpc-debug.apk 1. Use `snippet_shell` from mobly to trigger `tryEvent()`: snippet_shell.py com.google.android.mobly.snippet.example4 >>> callback = s.scheduleRpc('makeToast', 5000, ['message']) Wait for the message to show up on the screen (sync RPC call) >>> callback.waitAndGet('makeToast').data {u'callback': u'null', u'error': u'null', u'result': u'OK', u'id': u'0'} >>> callback = s.scheduleRpc('asyncMakeToast', 5000, ['message']) Wait for the message to show up on the screen (async RPC call) >>> callback.waitAndGet('asyncMakeToast').data {u'callback': u'1-1', u'error': u'null', u'result': u'null', u'id': u'0'}