{"id":11632,"date":"2022-09-28T02:57:16","date_gmt":"2022-09-27T21:27:16","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/"},"modified":"2022-09-28T02:57:16","modified_gmt":"2022-09-27T21:27:16","slug":"solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/","title":{"rendered":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-66292103\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"66292103\" data-parentid=\"66278441\" data-score=\"1\" 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>(Answer update: Since v0.18, this sort of pitfall doesn&#8217;t exist since the UI and background code run in a shared isolate. The answer below is only relevant for v0.17 and earlier.)<\/p>\n<p>audio_service runs your <code>BackgroundAudioTask<\/code> in a separate isolate. In the README, it is put this way:<\/p>\n<blockquote>\n<p>Note that your UI and background task run in separate isolates and do not share memory. The only way they communicate is via message passing. Your Flutter UI will only use the <code>AudioService<\/code> API to communicate with the background task, while your background task will only use the <code>AudioServiceBackground<\/code> API to interact with the UI and other clients.<\/p>\n<\/blockquote>\n<p>The key point there is that isolates do not share memory. If you set a &#8220;global&#8221; variable in the UI isolate, it will not be set in the background isolate because the background isolate has its own separate block of memory. That is why your global <code>queue<\/code> variable is null. It is not actually the same variable, because now you actually have two copies of the variable: one in the UI isolate which has been set with a value, and the other in the background isolate which has not (yet) been set with a value.<\/p>\n<p>Now, your background isolate does &#8220;later&#8221; set its own copy of the queue variable to something, and this happens via the message passing API where you pass the queue from the UI isolate into <code>updateQueue<\/code> and the background isolate receive that message and stores it into its own copy of the variable in <code>onUpdateQueue<\/code>. If you were to print out the queue after this point it would no longer be null.<\/p>\n<p>There is also a line in your <code>onStart<\/code> where you are attempting to set the queue, although you should probably delete that code and let the queue only be set in <code>onUpdateQueue<\/code>. You should not attempt to access the queue in <code>onStart<\/code> since your queue won&#8217;t receive its value until <code>onUpdateQueue<\/code>. If you want to avoid any null pointer exception before its set, you can initialise the queue in the background isolate to an empty list, and it will eventually get replaced by a non-empty list in <code>onUpdateQueue<\/code> without ever being null.<\/p>\n<p>I would also suggest you avoid making <code>queue<\/code> a global variable. Global variables are generally bad, but in this case, it may actually be confusing you into thinking that that queue variable is the same in both the UI and the background isolate when in reality each isolate will have its own copy of the variable perhaps with different values. Thus, your code will be clearer if you make two separate &#8220;local&#8221; variables. One inside the UI and one inside the background task.<\/p>\n<p>One more suggestion is that you should note that the methods in the message passing API are asynchronous methods. You should wait for the audio service to start before you send messages to it, such as setting the queue. AND you should wait for the queue to be set before you try to play from the queue:<\/p>\n<pre class=\"lang-dart prettyprint-override\"><code>await AudioService.start(....);\n\/\/ Now the service has started, it is safe to send messages.\nawait AudioService.updateQueue(...);\n\/\/ Now the queue has been updated, it is safe to play from it.\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] (Answer update: Since v0.18, this sort of pitfall doesn&#8217;t exist since the UI and background code run in a shared isolate. The answer below is only relevant for v0.17 and earlier.) audio_service runs your BackgroundAudioTask in a separate isolate. In the README, it is put this way: Note that your UI and background task &#8230; <a title=\"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\" aria-label=\"More on [Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI\">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":[847,846,3179],"class_list":["post-11632","post","type-post","status-publish","format-standard","hentry","category-solved","tag-dart","tag-flutter","tag-just-audio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - 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-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] (Answer update: Since v0.18, this sort of pitfall doesn&#8217;t exist since the UI and background code run in a shared isolate. The answer below is only relevant for v0.17 and earlier.) audio_service runs your BackgroundAudioTask in a separate isolate. In the README, it is put this way: Note that your UI and background task ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-27T21:27:16+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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI\",\"datePublished\":\"2022-09-27T21:27:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\"},\"wordCount\":522,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"dart\",\"flutter\",\"just-audio\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\",\"name\":\"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-09-27T21:27:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI\"}]},{\"@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=1775798750\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - 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-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - JassWeb","og_description":"[ad_1] (Answer update: Since v0.18, this sort of pitfall doesn&#8217;t exist since the UI and background code run in a shared isolate. The answer below is only relevant for v0.17 and earlier.) audio_service runs your BackgroundAudioTask in a separate isolate. In the README, it is put this way: Note that your UI and background task ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/","og_site_name":"JassWeb","article_published_time":"2022-09-27T21:27:16+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI","datePublished":"2022-09-27T21:27:16+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/"},"wordCount":522,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["dart","flutter","just-audio"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/","url":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/","name":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-09-27T21:27:16+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-how-to-send-data-to-audioservicetask-class-which-extends-backgroundaudiotask-from-ui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] How to send data to AudioServiceTask class which extends BackgroundAudioTask from UI"}]},{"@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=1775798750","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","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\/11632","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=11632"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/11632\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=11632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=11632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=11632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}