In the UI Thread commands are executed line by line, meaning a command line is not executed until the current thread is finished executing. All of our application’s components ( Activities, Services, ContentProviders, BroadcastReceivers , etc.) are created within this thread, and any system calls made to those components are performed there as well. However, that doesn’t mean that all the huge processes must be executed in the main thread. There’s a workaround for this that can improve your app’s performance and give users a much better experience: background threads . These threads are designed to handle any potentially long tasks that may hang your application. Typical examples of such tasks are network operations, which can involve unpredictable delays.