<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	دیدگاه‌ها برای: نحوه ارتباط بین thread ها	</title>
	<atom:link href="http://www.mahditajik.ir/%D9%86%D8%AD%D9%88%D9%87-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%DB%8C%D9%86-thread-%D9%87%D8%A7/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/</link>
	<description>I&#039;m Mahdi Tajik. I am project manager and Full-stack Android developer. welcome to my personal website.</description>
	<lastBuildDate>Thu, 29 Nov 2018 14:18:09 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.6</generator>
	<item>
		<title>
		توسط: mahdi		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4767</link>

		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Sun, 05 Aug 2018 04:55:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4767</guid>

					<description><![CDATA[در پاسخ به &lt;a href=&quot;http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4751&quot;&gt;امید فرجی&lt;/a&gt;.

پرواضح است که نمی توانید UI را آپدیت کنید. وقتی سیگنیچر اینترفیسی را که در جای دیگر پیاده سازی شده صدا می زنید، در حقیقت آن پیاده سازی را در ترد صدا زننده اجرا می کنیم. پس وقتی در ترد دیگری غیر از اصلی متد پیاده سازی شده در ترد اصلی را صدا می زنیم به خاطر اطلاع نداشتن از Context به کامپوننت های UI دسترسی نداریم و نمی توان آن را آپدیت کرد. به نظرم یک نکته ای که اصلاً بهش توجه ندارید این است که هدف ارتباط بین دو ترد است، نه دسترسی به Context هم یا آپدیت UI از ترد دیگر. شما می توانستید در پیاده سازی اینترفیس یک متغیری را در ترد اصلی مقدار دهی کنید یا یک متدی که به کانتکس و UI ارتباط ندارد را صدا بزنید و به هدف ارتباط بین دوترد برسید. البته تشکر می کنم که این بحث و شروع کردید و خوشحال می شم که ادامه بدیم.]]></description>
			<content:encoded><![CDATA[<p>پرواضح است که نمی توانید UI را آپدیت کنید. وقتی سیگنیچر اینترفیسی را که در جای دیگر پیاده سازی شده صدا می زنید، در حقیقت آن پیاده سازی را در ترد صدا زننده اجرا می کنیم. پس وقتی در ترد دیگری غیر از اصلی متد پیاده سازی شده در ترد اصلی را صدا می زنیم به خاطر اطلاع نداشتن از Context به کامپوننت های UI دسترسی نداریم و نمی توان آن را آپدیت کرد. به نظرم یک نکته ای که اصلاً بهش توجه ندارید این است که هدف ارتباط بین دو ترد است، نه دسترسی به Context هم یا آپدیت UI از ترد دیگر. شما می توانستید در پیاده سازی اینترفیس یک متغیری را در ترد اصلی مقدار دهی کنید یا یک متدی که به کانتکس و UI ارتباط ندارد را صدا بزنید و به هدف ارتباط بین دوترد برسید. البته تشکر می کنم که این بحث و شروع کردید و خوشحال می شم که ادامه بدیم.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: امید فرجی		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4751</link>

		<dc:creator><![CDATA[امید فرجی]]></dc:creator>
		<pubDate>Fri, 03 Aug 2018 12:53:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4751</guid>

					<description><![CDATA[ببخشید من اشتباها به جای متد نوشتم کلاس.
اصلا شما کد زیر رو تست کن و نتیجه رو خودت ببین:

     private void test() {
        final ThreadCallBack callBack = new ThreadCallBack() {
            @Override
            public void onMessage(String s) {
                mTextView.setText(s);
            }
        };


        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                callBack.onMessage(&quot;This is a Test&quot;);
            }
        }).start();
    }


    interface ThreadCallBack {
        void onMessage(String message);
    }
	
	
	من تست کردم. این خطا رو داد:
	CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

	این نشون میده که onMessage روی ترد ui اجرا نشده. درسته؟]]></description>
			<content:encoded><![CDATA[<p>ببخشید من اشتباها به جای متد نوشتم کلاس.<br />
اصلا شما کد زیر رو تست کن و نتیجه رو خودت ببین:</p>
<p>     private void test() {<br />
        final ThreadCallBack callBack = new ThreadCallBack() {<br />
            @Override<br />
            public void onMessage(String s) {<br />
                mTextView.setText(s);<br />
            }<br />
        };</p>
<p>        new Thread(new Runnable() {<br />
            @Override<br />
            public void run() {<br />
                try {<br />
                    Thread.sleep(5000L);<br />
                } catch (InterruptedException e) {<br />
                    e.printStackTrace();<br />
                }<br />
                callBack.onMessage(&#8220;This is a Test&#8221;);<br />
            }<br />
        }).start();<br />
    }</p>
<p>    interface ThreadCallBack {<br />
        void onMessage(String message);<br />
    }</p>
<p>	من تست کردم. این خطا رو داد:<br />
	CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.</p>
<p>	این نشون میده که onMessage روی ترد ui اجرا نشده. درسته؟</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: mahdi		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4732</link>

		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Tue, 31 Jul 2018 08:22:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4732</guid>

					<description><![CDATA[در پاسخ به &lt;a href=&quot;http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4722&quot;&gt;امید فرجی&lt;/a&gt;.

دقت کنید که testThreadCallback کلاس نیست و متده که در MainActivity صدا زده شده.]]></description>
			<content:encoded><![CDATA[<p>دقت کنید که testThreadCallback کلاس نیست و متده که در MainActivity صدا زده شده.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: امید فرجی		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4722</link>

		<dc:creator><![CDATA[امید فرجی]]></dc:creator>
		<pubDate>Sun, 29 Jul 2018 17:21:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4722</guid>

					<description><![CDATA[در پاسخ به &lt;a href=&quot;http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4534&quot;&gt;mahdi&lt;/a&gt;.

خیر. callBack در ترد ui اصلی ساخته نشده در کلاس testThreadCallback ساخته شده که این کلاس در ترد ui نیست ظاهرا.
وقتی در متد run متد onMessage رو صدا می زنید، این متد روی تردی که فراخوانی رو انجام داده اجرا میشه. در نتیجه دستوران متد onMessage روی ترد ui اجرا نمیشه.]]></description>
			<content:encoded><![CDATA[<p>خیر. callBack در ترد ui اصلی ساخته نشده در کلاس testThreadCallback ساخته شده که این کلاس در ترد ui نیست ظاهرا.<br />
وقتی در متد run متد onMessage رو صدا می زنید، این متد روی تردی که فراخوانی رو انجام داده اجرا میشه. در نتیجه دستوران متد onMessage روی ترد ui اجرا نمیشه.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: mahdi		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4534</link>

		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Tue, 03 Jul 2018 05:32:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4534</guid>

					<description><![CDATA[در پاسخ به &lt;a href=&quot;http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4527&quot;&gt;امید فرجی&lt;/a&gt;.

ممنون از پیام شما. اگر درست متوجه شده باشم نکته شما در مورد بخش دوم کال بک بود. همانطور که در کد ملاحظه می کنید callBack در ترد UI ساخته شده و فقط سیگنیچرش به ترد دیگر پاس داده شده و اجرای نهایی در ترد اصلی (که implement شده) خواهد بود و نیازی به هندلر نخواهیم داشت. (هدفمون در بخش دوم استفاده نکردن از messaging و استفاده از callBack بود).  در صورت امکان کد را یکبار اجرا و نتیجه را ببینید ولی اگر بازهم مشکل وجود داره خوشحال می شم بحث و ادامه بدیم.]]></description>
			<content:encoded><![CDATA[<p>ممنون از پیام شما. اگر درست متوجه شده باشم نکته شما در مورد بخش دوم کال بک بود. همانطور که در کد ملاحظه می کنید callBack در ترد UI ساخته شده و فقط سیگنیچرش به ترد دیگر پاس داده شده و اجرای نهایی در ترد اصلی (که implement شده) خواهد بود و نیازی به هندلر نخواهیم داشت. (هدفمون در بخش دوم استفاده نکردن از messaging و استفاده از callBack بود).  در صورت امکان کد را یکبار اجرا و نتیجه را ببینید ولی اگر بازهم مشکل وجود داره خوشحال می شم بحث و ادامه بدیم.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: امید فرجی		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-4527</link>

		<dc:creator><![CDATA[امید فرجی]]></dc:creator>
		<pubDate>Mon, 02 Jul 2018 16:22:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-4527</guid>

					<description><![CDATA[ممنون. از توضیحتون.
فقط یه نکته وجود داره.
دریافت کننده پیام یعنی آبجکتی که از ThreadCallBack ساختید واسمش رو گذاشتید callBack ، ترد جدا گانه نیست و روی همون ترد ارسال کننده پیام اجرا میشه، یعنی روی ترد UI اجرا نمیشه.
این یعنی اگه بخواید متد onMessage روی ترد UI اجرا بشه باید با استفاده از یه Handler با لوپر Main این کار رو انجام بدید.]]></description>
			<content:encoded><![CDATA[<p>ممنون. از توضیحتون.<br />
فقط یه نکته وجود داره.<br />
دریافت کننده پیام یعنی آبجکتی که از ThreadCallBack ساختید واسمش رو گذاشتید callBack ، ترد جدا گانه نیست و روی همون ترد ارسال کننده پیام اجرا میشه، یعنی روی ترد UI اجرا نمیشه.<br />
این یعنی اگه بخواید متد onMessage روی ترد UI اجرا بشه باید با استفاده از یه Handler با لوپر Main این کار رو انجام بدید.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: mahdi		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-2695</link>

		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Sun, 11 Feb 2018 18:05:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-2695</guid>

					<description><![CDATA[در پاسخ به &lt;a href=&quot;http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-2693&quot;&gt;محمدرضا&lt;/a&gt;.

سلام. خوشحالم که برات مفید بوده. :)]]></description>
			<content:encoded><![CDATA[<p>سلام. خوشحالم که برات مفید بوده. 🙂</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		توسط: محمدرضا		</title>
		<link>http://www.mahditajik.ir/%d9%86%d8%ad%d9%88%d9%87-%d8%a7%d8%b1%d8%aa%d8%a8%d8%a7%d8%b7-%d8%a8%db%8c%d9%86-thread-%d9%87%d8%a7/#comment-2693</link>

		<dc:creator><![CDATA[محمدرضا]]></dc:creator>
		<pubDate>Sun, 11 Feb 2018 08:39:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=2741#comment-2693</guid>

					<description><![CDATA[واااااای ...واقعا دمت گرم عالی توضیح دادی خیلی وقت بود نمیتونستم این messageQueueو ارتباطش با handlerوthreadرو درک کنم...واقعا دمت گررررررم]]></description>
			<content:encoded><![CDATA[<p>واااااای &#8230;واقعا دمت گرم عالی توضیح دادی خیلی وقت بود نمیتونستم این messageQueueو ارتباطش با handlerوthreadرو درک کنم&#8230;واقعا دمت گررررررم</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
