<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>broadcast-receiver &#8211; Mahdi Tajik</title>
	<atom:link href="http://www.mahditajik.ir/tag/broadcast-receiver/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mahditajik.ir</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:24:15 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.6</generator>

<image>
	<url>http://www.mahditajik.ir/wp-content/uploads/2015/03/cropped-sample-logo-MT-2-32x32.png</url>
	<title>broadcast-receiver &#8211; Mahdi Tajik</title>
	<link>http://www.mahditajik.ir</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>کاربا IntentService و تفاوت آن با Service</title>
		<link>http://www.mahditajik.ir/%da%a9%d8%a7%d8%b1%d8%a8%d8%a7-intentservice-%d9%88-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a2%d9%86-%d8%a8%d8%a7-service/</link>
					<comments>http://www.mahditajik.ir/%da%a9%d8%a7%d8%b1%d8%a8%d8%a7-intentservice-%d9%88-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a2%d9%86-%d8%a8%d8%a7-service/#comments</comments>
		
		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Tue, 21 Jun 2016 13:27:32 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[broadcast-receiver]]></category>
		<category><![CDATA[Intent]]></category>
		<category><![CDATA[IntentService]]></category>
		<category><![CDATA[serializable]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[اندروید]]></category>
		<category><![CDATA[سرویس]]></category>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=1863</guid>

					<description><![CDATA[<p>همانطور که می دانید سرویس ابزاری است که توسط آن دستورات را به بکگراند برده و درآنجا اجرا می کنیم. در یک برنامه می توان از تعداد زیادی سرویس بطور همزمان  استفاده کرد و برای متوقف کردن آنها هم می توان از داخل برنامه  و یا بصورت داخلی با دستور stopSelf عمل کرد. تفاوت های ...</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/%da%a9%d8%a7%d8%b1%d8%a8%d8%a7-intentservice-%d9%88-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a2%d9%86-%d8%a8%d8%a7-service/">کاربا IntentService و تفاوت آن با Service</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">همانطور که می دانید سرویس ابزاری است که توسط آن دستورات را به بکگراند برده و درآنجا اجرا می کنیم. در یک برنامه می توان از تعداد زیادی سرویس بطور همزمان  استفاده کرد و برای متوقف کردن آنها هم می توان از داخل برنامه  و یا بصورت داخلی با دستور stopSelf عمل کرد.</p>
<p style="text-align: justify;">تفاوت های اصلی IntentService با Service در این است که بعد از ایجاد آن در Worker دیگری جدا از thread برنامه قرار می گیرد. برنامه به راحتی می تواند با آن ارتباط برقرار کند و خود IntentService نیز بعد از انجام وظایف محول شده بسته می شود و لازم نیست نگران هندل کردن آن باشیم. همانگونه مطلع هستید توسط Service می توانیم چندین task موازی داشته باشیم در صورتی که اگر چند نمونه از intentService تولید کنیم همگی در یک thread بصورت صف پشت هم قرار می گیرند تا پس از اتمام دیگری اجرا شوند و به نظر می رسد برای انجام یکسری دستورات batch بصورت متوالی و پشت سرهم هستند، بسیار مناسب باشد.</p>
<blockquote><p>in short, a Service is a broader implementation for the developer to set up background operations, while an IntentService is useful for &#8220;fire and forget&#8221; operations, taking care of background Thread creation and cleanup</p></blockquote>
<p>جدول زیر نمایانگر تفاوت های عمده  می باشد:</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1871" src="http://www.mahditajik.ir/wp-content/uploads/2016/06/chart.jpg" alt="chart" width="1196" height="302" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/06/chart.jpg 1196w, http://www.mahditajik.ir/wp-content/uploads/2016/06/chart-300x76.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2016/06/chart-768x194.jpg 768w, http://www.mahditajik.ir/wp-content/uploads/2016/06/chart-1024x259.jpg 1024w" sizes="(max-width: 1196px) 100vw, 1196px" /></p>
<p>به مثال زیر توجه کنید: می خواهیم بعد از گرفتن ورودی توسط کاربر IntentService ای اجرا کنیم که کلاسی به نام  MyData ساخته و بعد از مقداردهی آن به برنامه بازگرداند و برنامه نیز در صورت باز بودن آن داده را نمایش دهد. برای ارتباط بین سرویس و برنامه از<br />
<pre class="crayon-plain-tag">BroadcastReceiver</pre>
استفاده می کنم و برای پاس دادن داده از اینترفیس<br />
<pre class="crayon-plain-tag">Serializable</pre>
</p><pre class="crayon-plain-tag">public class MyIntentService extends IntentService {

    public MyIntentService(){
        super("my intent service");

    }
    @Override
    protected void onHandleIntent(Intent intent) {

        String myName = intent.getStringExtra("NAME");
        SystemClock.sleep(1000);

        MyData myData = new MyData();
        myData.setId(110);
        myData.setName(myName);
        myData.setLasname("tajik");
        myData.setDate(DateFormat.format("dd/MM/yy h:mm:ss aa", System.currentTimeMillis()).toString());

        Intent broadCastIntent = new Intent();
        broadCastIntent.setAction("mahdi.broadcast.action");
        Bundle myboundle = new Bundle();
        myboundle.putSerializable("mahdi.data",myData);
        broadCastIntent.putExtra("mahdi.bundle",myboundle);

        LocalBroadcastManager myBroadCastManager = LocalBroadcastManager.getInstance(this);
        myBroadCastManager.sendBroadcast(broadCastIntent);

        Log.i("TAG", "onHandleIntent: name"+myName);
    }
}</pre><p>
کلاس  MyData به صورت زیر می باشد:</p><pre class="crayon-plain-tag">public class MyData implements Serializable {
    int Id;
    String name;
    String lasname;
    String date;

    public String getDate() {

        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLasname() {
        return lasname;
    }

    public void setLasname(String lasname) {
        this.lasname = lasname;
    }

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }
}</pre><p>
حال سرویس را در Manifest تعریف می کنیم:</p><pre class="crayon-plain-tag">&lt;service android:name=".MyIntentService"&gt;&lt;/service&gt;</pre><p>
<p style="text-align: justify;">برای ارتباط برقرار کردن از سرویس کافی است که Broadcast Receiver ای تعریف کنیم با فیلتری مشترک که در MainActivity باشد. همانطور که می دانید یکی از بهترین روش های ارتباط سرویس و برنامه استفاده از Broad Cast Receiver است. روش بدین صورت است که برنامه گوش خود را به فیلتر خاصی تیز می کند! (register) سپس سرویس نیز پیغامی با فیلتر موردنظر منتشر می کند. پس برنامه به صدای سرویس عکس العمل نشان داده و اطلاعات را گرفته و سپس نمایش می دهد. به همین سادگی.</p>
<pre class="crayon-plain-tag">public class MainActivity extends AppCompatActivity {

    BroadcastReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Bundle myBoundle = intent.getBundleExtra("mahdi.bundle");
                MyData mData = (MyData) myBoundle.getSerializable("mahdi.data");
                Toast.makeText(MainActivity.this, "Received mData.name=" + mData.getName(), Toast.LENGTH_SHORT).show();
            }
        };
    }

    @Override
    protected void onStart() {
        super.onStart();
        LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, new IntentFilter("mahdi.broadcast.action"));
    }

    @Override
    protected void onStop() {
        super.onStop();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
    }

    public void startService(View v) {
        EditText edit = (EditText) findViewById(R.id.editText);
        String name = edit.getText().toString().trim();

        Intent i = new Intent(MainActivity.this, MyIntentService.class);
        i.putExtra("NAME", name);
        startService(i);

    }
}</pre>
<p style="text-align: justify;">بعد از لمس شدن دکمه شروع در صورتی که برنامه را نبسته باشید پیغام Toast را مشاهده خواهید کرد.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1868" src="http://www.mahditajik.ir/wp-content/uploads/2016/06/Screenshot_20160620-170201.png" alt="Screenshot_20160620-170201" width="1080" height="1920" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/06/Screenshot_20160620-170201.png 1080w, http://www.mahditajik.ir/wp-content/uploads/2016/06/Screenshot_20160620-170201-169x300.png 169w, http://www.mahditajik.ir/wp-content/uploads/2016/06/Screenshot_20160620-170201-768x1365.png 768w, http://www.mahditajik.ir/wp-content/uploads/2016/06/Screenshot_20160620-170201-576x1024.png 576w" sizes="(max-width: 1080px) 100vw, 1080px" /></p>
<p>آزمایش کردن اجرای چند IntentService باهم نیز بسیار ساده است. کافی است  سرویس خودمان را چندبار  پشت سر هم اییجاد کنید و خواهید دید که هرکدام  بعد از ۵ ثانیه ( یعنی تمام شدن کارهای سرویس قبلی) اجرا خواهند شد. یعنی بصورت موازی نبوده و در صف قرار می گیرند.</p>
<p>در جواب یکی از دوستان سوالی پرسیده بودند که آیا این هم مانند سرویس در صورت بسته شدن برنامه اجرا می شود یا خیر، باید عرض کنم &#8220;بله&#8221;. IntentService هم مانند سرویس در صورت بسته بودن برنامه اجرا می شود. برای تست این قضیه می توانید<br />
<pre class="crayon-plain-tag">MainActivity</pre>
را به این صورت تغییر داده و نتیجه را ببینید:</p><pre class="crayon-plain-tag">public class MainActivity extends AppCompatActivity {

    BroadcastReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Bundle myBoundle = intent.getBundleExtra("mahdi.bundle");
                MyData mData = (MyData) myBoundle.getSerializable("mahdi.data");
                Toast.makeText(MainActivity.this, "Received mData.name=" + mData.getName(), Toast.LENGTH_SHORT).show();
            }
        };

        for(int i=0; i&lt;10 ; i++){
            startService("name"+i);
        }
        this.finish();
    }

    @Override
    protected void onStart() {
        super.onStart();
        LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, new IntentFilter("mahdi.broadcast.action"));
    }

    @Override
    protected void onStop() {
        super.onStop();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
    }

    public void startService(String name) {
        EditText edit = (EditText) findViewById(R.id.editText);
//        String name = edit.getText().toString().trim();

        Intent i = new Intent(MainActivity.this, MyIntentService.class);
        i.putExtra("NAME", name);
        startService(i);

    }</pre><p>
تلاش من در آموزش ها این است که نه تنها مورد آموزش بلکه موارد دیگری را که به نظرم مفید است استفاده کنم. به عنوان مثال در این بحث از<br />
<pre class="crayon-plain-tag">BroadcastReceiver</pre>
و<br />
<pre class="crayon-plain-tag">Serializable</pre>
<p style="text-align: justify;">استفاده کردم. مطمئناً خیلی از دوستان آشنایی کامل دارند و استفاده می کنند. اما دوستانی که برایشان تازه است حتماً راجع به آنها خوانده و در صورت نیاز سوال بپرسند. امیدوارم مطالب مفید بوده باشد. درصورتی که سوال و یا نکته نظری داشتید کامنت بگذارید. خیلی ممنون.</p>
<p>منبع: <a href="http://www.biitecode.ir" target="_blank" rel="noopener">بایت کد</a></p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/%da%a9%d8%a7%d8%b1%d8%a8%d8%a7-intentservice-%d9%88-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a2%d9%86-%d8%a8%d8%a7-service/">کاربا IntentService و تفاوت آن با Service</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://www.mahditajik.ir/%da%a9%d8%a7%d8%b1%d8%a8%d8%a7-intentservice-%d9%88-%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a2%d9%86-%d8%a8%d8%a7-service/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
