{"id":14264,"date":"2022-10-07T02:59:40","date_gmt":"2022-10-06T21:29:40","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/"},"modified":"2022-10-07T02:59:40","modified_gmt":"2022-10-06T21:29:40","slug":"solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/","title":{"rendered":"[Solved] Why not do all the operations in the main thread(Android)? [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-24339461\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"24339461\" data-parentid=\"24339016\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>From the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/guide\/components\/processes-and-threads.html#Threads\">docs<\/a>:<\/p>\n<blockquote>\n<p>When an application is launched, the system creates a thread of execution for the application, called &#8220;main.&#8221; This thread is very important because it is in charge of dispatching events to the appropriate user interface widgets, including drawing events.<\/p>\n<\/blockquote>\n<p>In other words, <strong>ALL<\/strong> UI-related tasks occur on the same thread, and it is called the main thread or UI thread.<\/p>\n<blockquote>\n<p>When your app performs intensive work in response to user interaction, this single thread model can yield poor performance unless you implement your application properly. Specifically, if everything is happening in the UI thread, performing long operations such as network access or database queries will block the whole UI.<\/p>\n<\/blockquote>\n<p>Simply put, when the UI has to wait for some I\/O, data retrieval or data processing to complete before it can finish rendering the screen, your application &#8220;hangs&#8221; till that process is complete.<\/p>\n<blockquote>\n<p>The user might then decide to quit your application and uninstall it if they are unhappy.<\/p>\n<\/blockquote>\n<p>I think this is self-explanatory.<\/p>\n<blockquote>\n<p>There are simply two rules to Android&#8217;s single thread model:<\/p>\n<ol>\n<li>Do not block the UI thread<\/li>\n<li>Do not access the Android UI toolkit from outside the UI thread<\/li>\n<\/ol>\n<\/blockquote>\n<p>Hence, everything not related to the UI <strong>MUST<\/strong> be done in a separate thread, and everything related to the UI <strong>MUST<\/strong> be done <strong>WITHOUT<\/strong> any kind of parallel processing.<\/p>\n<p>So how do we perform parallel processing ? Android offers different kinds of parallel processing based on your needs:<\/p>\n<p><strong>1.<\/strong> Good old Java <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/java\/lang\/Thread.html\"><code>Threads<\/code><\/a><\/p>\n<p><strong>2.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/os\/Handler.html\"><code>Handlers<\/code><\/a><\/p>\n<p><strong>3.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/app\/Activity.html#runOnUiThread%28java.lang.Runnable%29\"><code>Activity.runOnUiThread(Runnable)<\/code><\/a><\/p>\n<p><strong>4.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/view\/View.html#post%28java.lang.Runnable%29\"><code>View.post(Runnable)<\/code><\/a><\/p>\n<p><strong>5.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/view\/View.html#postDelayed%28java.lang.Runnable,%20long%29\"><code>View.postDelayed(Runnable, long)<\/code><\/a><\/p>\n<p><strong>6.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/os\/AsyncTask.html\"><code>AsyncTasks<\/code><\/a><\/p>\n<p><strong>7.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/app\/IntentService.html\"><code>IntentServices<\/code><\/a>  (<a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/app\/Service.html\"><code>Services<\/code><\/a> <strong>DO NOT<\/strong> run on a separate thread).<\/p>\n<p>On a side note, Android specifically enforces that all network operations be performed on a separate thread, else a <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/developer.android.com\/reference\/android\/os\/NetworkOnMainThreadException.html\"><code>NetworkOnMainThreadException<\/code><\/a> is thrown.<\/p>\n<p>Now coming back to your question :<\/p>\n<blockquote>\n<p>My question is how is this difference form just running everything on the main thread? I know that onPostExecute has to wait for the xml do in background retrieve to finish which will still lock up the ui for the user?<\/p>\n<\/blockquote>\n<p>What happens is that if the device has more than one core, UI rendering is done through one core (the main thread) while the <code>doInBackground()<\/code> method is executed on the other core (the <code>AsyncTask<\/code> thread), and the <code>onPostExecute()<\/code> method is called on the main thread only after <code>doInBackground()<\/code> has returned. This means that <code>onPostExecute()<\/code> is also waiting for the UI to finish rendering, as both UI rendering &amp; <code>onPostExecute()<\/code> occur on the main thread.<\/p>\n<p>Now if the device has only one core, everything will happen on a single core, but <code>doInBackground()<\/code> will be executed on a separate thread, and <code>onPostExecute()<\/code> will be called only after UI rendering is complete and <code>doInBackground()<\/code> has returned.<\/p>\n<p>I hope this was helpful.<\/p>\n<p><strong>Further Reading:<\/strong><\/p>\n<p><strong>1.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/androidresearch.wordpress.com\/2012\/03\/17\/understanding-asynctask-once-and-forever\/\">Understanding AsyncTask \u2013 Once and Forever<\/a><\/p>\n<p><strong>2.<\/strong> <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/www.jayway.com\/2012\/11\/28\/is-androids-asynctask-executing-tasks-serially-or-concurrently\/\">Is Android\u2019s AsyncTask executing tasks serially or concurrently?<\/a><\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">3<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Why not do all the operations in the main thread(Android)? [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] From the docs: When an application is launched, the system creates a thread of execution for the application, called &#8220;main.&#8221; This thread is very important because it is in charge of dispatching events to the appropriate user interface widgets, including drawing events. In other words, ALL UI-related tasks occur on the same thread, and &#8230; <a title=\"[Solved] Why not do all the operations in the main thread(Android)? [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\" aria-label=\"More on [Solved] Why not do all the operations in the main thread(Android)? [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[452,1859,3751,323,884],"class_list":["post-14264","post","type-post","status-publish","format-standard","hentry","category-solved","tag-android","tag-android-asynctask","tag-clarity","tag-java","tag-multithreading"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] From the docs: When an application is launched, the system creates a thread of execution for the application, called &#8220;main.&#8221; This thread is very important because it is in charge of dispatching events to the appropriate user interface widgets, including drawing events. In other words, ALL UI-related tasks occur on the same thread, and ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-06T21:29:40+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Why not do all the operations in the main thread(Android)? [closed]\",\"datePublished\":\"2022-10-06T21:29:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\"},\"wordCount\":474,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"android\",\"android-asynctask\",\"clarity\",\"java\",\"multithreading\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\",\"name\":\"[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-06T21:29:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Why not do all the operations in the main thread(Android)? [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb","og_description":"[ad_1] From the docs: When an application is launched, the system creates a thread of execution for the application, called &#8220;main.&#8221; This thread is very important because it is in charge of dispatching events to the appropriate user interface widgets, including drawing events. In other words, ALL UI-related tasks occur on the same thread, and ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/","og_site_name":"JassWeb","article_published_time":"2022-10-06T21:29:40+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Why not do all the operations in the main thread(Android)? [closed]","datePublished":"2022-10-06T21:29:40+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/"},"wordCount":474,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["android","android-asynctask","clarity","java","multithreading"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/","name":"[Solved] Why not do all the operations in the main thread(Android)? [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-06T21:29:40+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-why-not-do-all-the-operations-in-the-main-threadandroid-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Why not do all the operations in the main thread(Android)? [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/14264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=14264"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/14264\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=14264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=14264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=14264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}