When I develop with Expo I have the iOS simulator, an iPhone, an iPad, and a Samsung Android tablet handy, talking over the LAN (wifi). I thought I’d mention some of the ways in which the Android development experience is still clunky, especially when it comes to Live Reload and the edit-compile-run cycle, at least compared with the incredible almost instant reload cycle on iOS, to see if others are experiencing the same things and if these issues are known and being worked on.
Flaky and error-prone Live Reload: When I save my code, sometimes the Android tablet does nothing. Sometimes it appears to do nothing for several seconds or longer, with no visual feedback, and then suddenly refreshes. I’m not sure what the upper bound is on refresh time, i.e. how long I have to wait to be sure it is not refreshing. The worst part is, if I do a manual refresh while an automatic refresh is in progress, Expo breaks and I have to quit and relaunch it. One failure mode is Expo shows a blue screen (an error message with two icons, refresh and home), and all future attempts to load the app now fail with this error screen. A second, rarer failure mode is an infinite refresh loop. Generally, I expect that if, despite my best efforts, I do a manual refresh (from the Android pull-down sheet) while Expo is secretly working on an automatic refresh, I will hit one of these failure modes. I’ve learned that if nothing seems to be happening on the device, saving my code again is a much safer way to give it a “kick” than using the reload button. Sometimes, it seems like a live reload completes in as little as 5 seconds, but without any visual feedback on the screen, it is hard to tell when the reload started.
Slow download and load times: Android takes many times longer to download the bundle, and to run the bundle. It can take something like up to 10 seconds just to download the bundle, compared to a second or two (or under a second) on iOS. Manual reload and live reload seem to have totally different behavior, here. As described above, live reload shows no feedback about what it’s doing and seems to take anywhere from 5 seconds to forever (I don’t really know the exact range). A manual reload shows download progress, and seems to take around 10 seconds, most of which is spent downloading!
It would be so awesome to have an Android dev experience on par with the iOS experience. I’m puzzled about why Live Reload works the way it does on Android, and why downloading the bundle is so slow.