MediaPlayer.start() is not an intensive operation. MediaPlayer uses its own native stream to perform tasks, but calling the synchronous prepare method may take too long for the user interface stream, especially if it is the remote medium you are trying to play. In this case, it must wait for one or more network requests, data for the buffer, etc. The onPrepared will occur in the main thread if this is where you called prepareAsync (or any thread from which you called it, more precisely).
source share