I think I already have enough information to give an update.
First of all, when I have Starter in the project, this is a more correct description of what happens when I get the ANRs:
1. I connected my phone to USB
2. I compiled as Debug
3. The screen on my phone went white, and nothing happened
4. The IDE informed me that it couldn't connect the debugger
5. I didn't do anything for about 20 seconds
6. "App isn't responding" message on phone
(In #21, above, I describe how I get the message when doing a second compile. But when I stopped rushing the second compile and instead just waited, I realized that the ANR is related to the first compile.)
I then tried removing Starter to see what would happen. Several tries in and this is it:
1. I connected my phone to USB
2. I compiled as Debug
3. The screen on my phone shows gray background, with a message "Waiting for IDE debugger to connect" (can't remember seeing that before, because Starter is gone?)
4. The IDE informed me that it couldn't connect the debugger
5. I didn't do anything for about 20 seconds
6. The message on the phone goes away and I return to the "Desktop"
7. No ANR
For both these scenarios, if I compile debug again, the IDE instantly connects and everything works just as expected.
I've done a lot more tests as I've tried to find a common thread for what is going on. I haven't quite finally found one, but I have found one thing that surprised me: If I have a (working) debug running and press Stop in the IDE the app stops. I then disconnect the phone and reconnect it. (Remember: USB) Then I compile debug again, and it will still fail most of the times. (Like I said, no common thread - it doesn't always fail.) It surprised me because I thought that me just pulling the cord while the debug app was running left it in some half-working state that messed with the next compilation - doesn't seem to be correct at all.
In any case there
might be a root cause for all this - that the IDE and the debug app can't establish a connection under some (for me) unknown circumstances.
There are still some usages for the starter service such as Application_Error, but it looks like it makes sense to provide whatever possible in different modules and remove it by default.
From my perspective it makes a lot of sense to have Application_Error in Main.
Update. I forgot to mention that if I see that the connection takes too long to establish I can just press stop and compile again, and it works pretty much instantly. (Meaning I don't have to wait for any error messages.)