آموزش برنامه نویسی اندروید (Android)
دسته بندی ( ۴۸۲ آموزش )
نمایش دسته بندی ها (۴۸۲ آموزش)
مباحث اولیه، در برنامه نویسی اندروید
مباحث اولیه، در برنامه نویسی اندروید 28
کار با Activity ها ، در برنامه نویسی اندروید
کار با Activity ها ، در برنامه نویسی اندروید 21
طراحی فایل های xml متناظر با Activity ها و ... (لایه گرافیکی Activity ها و ...)، در برنامه نویسی اندروید
طراحی فایل های xml متناظر با Activity ها و ... (لایه گرافیکی Activity ها و ...)، در برنامه نویسی اندروید 11
کار با برنامه Eclipse (یا همان ADT Bundle)، در برنامه نویسی اندروید
کار با برنامه Eclipse (یا همان ADT Bundle)، در برنامه نویسی اندروید 11
خطاهای رایج در برنامه Eclipse و در برنامه نویسی اندروید
خطاهای رایج در برنامه Eclipse و در برنامه نویسی اندروید 10
کار با برنامه Android Studio ، در برنامه نویسی اندروید
کار با برنامه Android Studio ، در برنامه نویسی اندروید 9
خطاهای رایج در برنامه Android Studio و در برنامه نویسی اندروید
خطاهای رایج در برنامه Android Studio و در برنامه نویسی اندروید 3
تبدیل متغیرها و سایر تبدیل ها، در برنامه نویسی اندروید
تبدیل متغیرها و سایر تبدیل ها، در برنامه نویسی اندروید 9
نمایش عکس و کار با ImageView ، در برنامه نویسی اندروید
نمایش عکس و کار با ImageView ، در برنامه نویسی اندروید 23
نمایش متن و کار با رشته ها (strings) و TextView ، در برنامه نویسی اندروید
نمایش متن و کار با رشته ها (strings) و TextView ، در برنامه نویسی اندروید 38
ساخت دکمه (Button) ، در برنامه نویسی اندروید
ساخت دکمه (Button) ، در برنامه نویسی اندروید 7
ساخت لیست (فهرست) با ListView ، در برنامه نویسی اندروید
ساخت لیست (فهرست) با ListView ، در برنامه نویسی اندروید 12
ساخت EditText، در برنامه نویسی اندروید
ساخت EditText، در برنامه نویسی اندروید 6
مجموعه ویدئوهای آموزش طراحی متریال (Material Design)، در برنامه نویسی اندروید
مجموعه ویدئوهای آموزش طراحی متریال (Material Design)، در برنامه نویسی اندروید 13
طراحی متریال (Material Design)، در برنامه نویسی اندروید
طراحی متریال (Material Design)، در برنامه نویسی اندروید 3
پخش موسیقی، در برنامه نویسی اندروید
پخش موسیقی، در برنامه نویسی اندروید 5
نمایش انیمیشن، در برنامه نویسی اندروید
نمایش انیمیشن، در برنامه نویسی اندروید 3
تغییر ویژگی های کلی برنامه اندروید
تغییر ویژگی های کلی برنامه اندروید 3
ذخیره اطلاعات با SharedPreferences ، در برنامه نویسی اندروید
ذخیره اطلاعات با SharedPreferences ، در برنامه نویسی اندروید 2
پایگاه داده (SQLite Database)، در برنامه نویسی اندروید
پایگاه داده (SQLite Database)، در برنامه نویسی اندروید 10
تبادل اطلاعات بین برنامه اندروید و سرور اینترنتی (اینترنت)، در برنامه نویسی اندروید
تبادل اطلاعات بین برنامه اندروید و سرور اینترنتی (اینترنت)، در برنامه نویسی اندروید 21
نمایش یک صفحه اینترنتی یا کدهای HTML (کار با WebView) و ساخت لینک، در برنامه نویسی اندروید
نمایش یک صفحه اینترنتی یا کدهای HTML (کار با WebView) و ساخت لینک، در برنامه نویسی اندروید 8
حلقه ها (for و while و ...)، در برنامه نویسی اندروید
حلقه ها (for و while و ...)، در برنامه نویسی اندروید 2
نمایش پیام به کاربر (Dialog و AlertDialog و Toast و Notification و ...)، در برنامه نویسی اندروید
نمایش پیام به کاربر (Dialog و AlertDialog و Toast و Notification و ...)، در برنامه نویسی اندروید 11
ویژگی های صفحه نمایش و چرخش آن، در برنامه نویسی اندروید
ویژگی های صفحه نمایش و چرخش آن، در برنامه نویسی اندروید 10
به دست آوردن ویژگی های کلی برنامه اندروید، در برنامه نویسی اندروید
به دست آوردن ویژگی های کلی برنامه اندروید، در برنامه نویسی اندروید 4
به دست آوردن ویژگی های گوشی کاربر، در برنامه نویسی اندروید
به دست آوردن ویژگی های گوشی کاربر، در برنامه نویسی اندروید 5
بازی سازی، در برنامه نویسی اندروید
بازی سازی، در برنامه نویسی اندروید 1
به اشتراک گذاری (share)، در برنامه نویسی اندروید
به اشتراک گذاری (share)، در برنامه نویسی اندروید 5
کار با فایل ها و فولدرها در حافظه خارجی (External Storage)، در برنامه نویسی اندروید
کار با فایل ها و فولدرها در حافظه خارجی (External Storage)، در برنامه نویسی اندروید 15
کار با پوشه های raw و assets ، در برنامه نویسی اندروید
کار با پوشه های raw و assets ، در برنامه نویسی اندروید 2
عملیات های ریاضی، در برنامه نویسی اندروید
عملیات های ریاضی، در برنامه نویسی اندروید 13
کار با دوربین (Camera)، در برنامه نویسی اندروید
کار با دوربین (Camera)، در برنامه نویسی اندروید 3
کار با action bar ، در برنامه نویسی اندروید
کار با action bar ، در برنامه نویسی اندروید 4
کار با کلاس ها (class) ، در برنامه نویسی اندروید
کار با کلاس ها (class) ، در برنامه نویسی اندروید 4
کار با package ها ، در برنامه نویسی اندروید
کار با package ها ، در برنامه نویسی اندروید 2
نرم افزارهای شبیه ساز برای اجرای برنامه های اندروید بر روی سیستم عامل کامپیوتر (مثل ویندوز)
نرم افزارهای شبیه ساز برای اجرای برنامه های اندروید بر روی سیستم عامل کامپیوتر (مثل ویندوز) 2
امنیت، در برنامه نویسی اندروید
امنیت، در برنامه نویسی اندروید 1
Thread ها، در برنامه نویسی اندروید
Thread ها، در برنامه نویسی اندروید 3
سرویس ها (Service)، در برنامه نویسی اندروید
سرویس ها (Service)، در برنامه نویسی اندروید 9
BroadcastReceiver ، در برنامه نویسی اندروید
BroadcastReceiver ، در برنامه نویسی اندروید 0
تاریخ و زمان و تمامی موارد مرتبط با زمان (عملیات های زمان بندی شده و ...)، در برنامه نویسی اندروید
تاریخ و زمان و تمامی موارد مرتبط با زمان (عملیات های زمان بندی شده و ...)، در برنامه نویسی اندروید 11
AsyncTask ، در برنامه نویسی اندروید
AsyncTask ، در برنامه نویسی اندروید 2
آرایه ها (Arrays)، در برنامه نویسی اندروید
آرایه ها (Arrays)، در برنامه نویسی اندروید 3
لیست آرایه ای (ArrayList)، در برنامه نویسی اندروید
لیست آرایه ای (ArrayList)، در برنامه نویسی اندروید 6
رنگ ها (Colors)، در برنامه نویسی اندروید
رنگ ها (Colors)، در برنامه نویسی اندروید 3
Fragment ها و Tab بندی، در برنامه نویسی اندروید
Fragment ها و Tab بندی، در برنامه نویسی اندروید 8
معرفی کتابخانه ها (Libraries)، در برنامه نویسی اندروید
معرفی کتابخانه ها (Libraries)، در برنامه نویسی اندروید 1
ساخت ProgressDialog یا ProgressBar برای نمایش میزان پیشرفت اجرای یک سری عملیات، در برنامه نویسی اندروید
ساخت ProgressDialog یا ProgressBar برای نمایش میزان پیشرفت اجرای یک سری عملیات، در برنامه نویسی اندروید 3
نسخه اندروید (Android version) و API level (نسخه API) ، در برنامه نویسی اندروید
نسخه اندروید (Android version) و API level (نسخه API) ، در برنامه نویسی اندروید 1
لرزاندن گوشی (vibrate)، در برنامه نویسی اندروید
لرزاندن گوشی (vibrate)، در برنامه نویسی اندروید 2
پرداخت درون برنامه ای، در برنامه نویسی اندروید
پرداخت درون برنامه ای، در برنامه نویسی اندروید 1
 پروژه های اندروید Open Source کاربران کلیدستان
پروژه های اندروید Open Source کاربران کلیدستان 2
ساخت امکانات جانبی (جستجو، لیست علاقه مندی، لوگو، منو و ...) برای برنامه اندروید
ساخت امکانات جانبی (جستجو، لیست علاقه مندی، لوگو، منو و ...) برای برنامه اندروید 5
مباحث عمومی، در برنامه نویسی اندروید
مباحث عمومی، در برنامه نویسی اندروید 35

مفهوم Thread در برنامه نویسی اندروید و همچنین توضیحاتی در مورد همزمان سازی (Synchronizing)

در سیستم عامل های مختلف (از جمله اندروید)، thread ها یکی از مفاهیم اصلی می باشند که به ما قابلیت انجام چند کار (multitasking) را می دهند، به گونه ای که بتوانیم عملیات های مختلف را به شکلی مدیریت کنیم که هیچ اختلالی برای یکدیگر ایجاد نکنند. در واقع با استفاده از thread ها می توانیم اجرای موازی (parallel execution) عملیات های مختلف در برنامه ها (applications) را امکان پذیر کنیم.

شاید برای درک مفهوم thread ، بهتر باشد که یک مثال ساده بزنم. شما thread را به عنوان یک جاده یک طرفه در نظر بگیرید که ماشین ها پشت سرهم در حال عبور از آن هستند. همچنین بخش های مختلف کدهای برنامه را هم به عنوان ماشین ها در نظر بگیرید. بنابراین جلو رفتن ماشین ها در جاده، به معنای همان اجرا شدن کدها است. اکنون فرض کنید که جاده مورد نظر یک بانده است و ترافیک سنگینی هم در آن وجود دارد. مسلما هر ماشینی، یک هدف خاص دارد، شاید یکی برایش اهمیت نداشته باشد که کی به مقصد برسد، اما یکی دیگر، ماشین آمبولانس باشد که باید به بیمارستان برسد. در واقع با این مثال قصد داشتم بگویم که بخش های مختلف کدها، دارای اولویت بندی متفاوت و همچنین سرعت های متفاوت برای اجرا شدن هستند و اگر قرار باشد که به ترتیب اجرا شوند (مثل ماشین هایی که در یک جاده یک بانده، پشت سرهم گیر افتاده اند)، برنامه کند شده (ترافیک ایجاد می شود) و حتی گاهی آنچه در نظر داریم را اصلا نمی توانیم اجرا کنیم و کل عملیات ها قفل می شود (یک مرده توی آمبولانس، روی دستمون میمونه) (اگر در سیستم عامل های مختلف مثل ویندوز دیده باشید، گاهی یک برنامه قفل می شود و پیامی به ما نشان داده می شود با این عنوان که دیگر برنامه پاسخگو نیست، این موارد نیز به همین صورت ایجاد می شوند). پس باید جاده را چند بانده کنیم و ماشین ها را از باندهای مختلف عبور بدهیم، بنابراین برخی مواقع، تنها یک thread کافی نیست و باید چند thread را به کار ببریم.

هنگامی که یک برنامه اندروید را اجرا می کنیم، سیستمی که برای اجرای برنامه اندروید به کار می رود، یک thread را می سازد که به صورت پیش فرض، تمام بخش های برنامه اندروید، در این thread اجرا می شوند. این thread را thread اصلی (main thread) می نامند. وظیفه اولیه thread اصلی این است که پاسخ های مربوط به تعامل کاربر با نماهای (views) برنامه اندروید را اجرا نماید (event handling). هر بخش از کدهای برنامه اندروید که قرار باشد اجرا شود، در همین thread اصلی اجرا می شود (چون پیش فرض همین است).

حال فرض کنید قرار باشد بخشی از کدها در thread اصلی اجرا شود که زمانبر (time consuming) است (مثلا دریافت اطلاعات از اینترنت که بر اساس سرعت دریافت اطلاعات، متغیر است)، همین بخش باعث می شود که اجرای کدهای سایر بخش ها در thread اصلی با مشکل روبرو شود و کل فرآیند، کند یا اصلا قفل شود (در جاده یک بانده، یک ماشین، راه سایر ماشین ها را سد می کند). بنابراین راه حل این است که بخشی از کدها را که حدس می زنیم زمانبر (time consuming) هستند، در یک thread جداگانه اجرا کنیم (چند بانده کردن جاده).

توضیحاتی در مورد همزمان سازی (Synchronizing) :

با توجه به توضیحاتی که دادیم، اصل اول این خواهد بود که چنانچه تشخیص دادیم یک عملیات، عملیاتی زمانبر است، هرگز نباید آن را در thread اصلی اجرا کنیم و آن را در یک thread جداگانه اجرا خواهیم کرد. علاوه بر این، یک اصل دیگر هم وجود دارد و آن این است که کدی که در یک thread جداگانه (به غیر از thread اصلی برنامه اندروید) اجرا می شود، تحت هیچ شرایطی نباید بخش تعامل با کاربر (user interface) برنامه اندروید را به روزرسانی (update - تغییر دادن) کند. هر تغییری (بروزرسانی) در بخش تعامل با کاربر (user interface) باید توسط thread اصلی (main thread) انجام شود. دلیل این موضوع این است که Android UI toolkit به صورت thread-safe نیست و فقط در همین حد بدانید که این ویژگی باعث می شود که اگر بخواهیم توسط چند thread ، بخش تعامل با کاربر (user interface) را تغییر بدهیم، مشکلات پیش بینی نشده ای به وجود می آید. بنابراین برای مواردی که کد thread ای که جدای از thread اصلی است، نیاز دارد که بخش تعامل با کاربر (user interface) را به روزرسانی کند (update)(تغییر بدهد)، باید از همزمان سازی (synchronizing) با thread اصلی (main UI thread) استفاده کنیم. در این روش، thread اصلی، پیام هایی را از thread مورد نظر دریافت می کند و بر اساس آنها، بخش تعامل با کاربر (user interface) را بروزرسانی (update) خواهد کرد.

نویسنده علیرضا گلمکانی
شماره کلید 2718
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 6 6 0
sami
۱۳۹۵/۰۴/۲۸
۱۷:۴۰

مرسی از مطالب خوبتون ...
1.آیا هر برنامه یک ترید اصلی دارد یا هر اکتیویتی یک ترید اصلی دارد؟
2.چطور تشخیص دهیم کدام قسمت برنامه ترید اصلی رو سنگین کرده؟

admin
۱۳۹۵/۰۴/۲۹
۱۴:۳۲

سلام.
1- هر برنامه اندروید (Application) تنها دارای یک Thread اصلی می باشد که آن را Main Thread یا UI Thread می نامند. تنها این Thread می تواند UI (رابط گرافیکی برنامه اندروید) را تغییر بدهد.
می دانیم که در هر زمان، تنها یک Activity را در foreground داریم (منظورمان از حالت foreground برای Activity ، زمانی است که Activity را به صورت کامل می بینیم و به ظور کامل در حال کار با اجزای آن هستیم) و بقیه Activity هایی که قبلا اجرا شده اند، در پس زمینه (background) هستند، یعنی یا در حالت stop می باشند (هیچ بخشی از آنها را نمی بینیم)، با در حالت pause (بخشی از آنها قابل مشاهده است، مثلا یک Dialog نمایش داده شده و بخشی از Activity را در زیر Dialog می بینیم).
آن Activity که در foreground است، توسط Thread اصلی اجرا می شود. بنابراین تمامی Activity ها توسط Thread اصلی اجرا می شوند (Activity هنگام اجرا در foreground می باشد)، زیرا در Activity که در foreground است، باید بتوانیم با UI برنامه کار کنیم. 
بنابراین به طور کلی باید بگوییم که هر برنامه اندروید (Application)، یک Thread اصلی دارد که چنانچه هر Activity از برنامه بخواهد به طور کامل اجرا شود (در foreground قرار بگیرد)، توسط آن Thraed اصلی اجرا خواهد شد.

می توان عملیات ها را در Thread های دیگری نیز اجرا کرد، اما تنها Thread اصلی می تواند UI برنامه اندروید را تغییر بدهد (در این زمینه، کلید شماره 2858 خوانده شود).

توضیحات کامل تر را در لینک زیر بخوانید :

http://www.kelidestan.com/copy-blocked-s...reads.html

2- سوال دوم در موضوع زیر مطرح شده و توصیه می شود در همانجا پیگیری کنید :

http://www.kelidestan.com/forum/showthread.php?tid=8159

Flower

جواد
۱۳۹۶/۰۶/۱۰
۱۰:۲۷

عالی بود

میلاد
۱۳۹۶/۱۰/۲۴
۰۷:۵۱

با سلام و تشکر از مطالب ارزشمندتون
میخواستم یه سوال کلی در مورد برنامه نویسی همزمان در اندروید بپرسم
با توجه به اینکه براز برنامه نویسی همزمان در اندروید میشه از روش کلاس AsyncTask و هم handlerو post و یا با استفاده از تردها و متغیر قفل استفاده کرد بنظرتون کدوم روش الان هم یادگیری و استفاده ازش آسون تره و هم الان برنامه نویسان بیشتر از کدوم روش استفاده میکنن؟ مثلا من خودم چون کامپیوتر خوندم میدونم همزمان سازی کلا بحث پیچیده ای است در برنامه نویسی و کلا سرباری داره برای سی پی یو! مثلا روش پترسون یک مقدار انتظار مشغولی داره ! با وجود اینکه روش خوبیه در نقطه مقابلش برنامه نویسی غیرهمزمان یا Asyncronous یا برنامه نویسی که لا به لای هم دستورات رو اجرا میکنه هم بعلت وقفه های زیاد و سوییچ کردن بازم این روش سرعت اجرای کمتری داره بطور کلی اصلا برنامه نویسی همروند در اندروید خوبه؟ میشه کلا از روش همزمان سازی برنامه نوشت یعنی Syncronous ؟ کلا راهنماییتون چیه؟ خیلی ممنون میشم توصیح بدین
بازم از سایت خوبتون و زحماتی که می کشید و مطالب ارزشمند در اختیار دیگران میگذارید کمال تشکر و سپاسگزاری رو دارم. ممنون منتظر پاسختون هستم.

میلاد
۱۳۹۶/۱۱/۰۵
۱۹:۵۸

ظاهرا اینجا دیر به دیر آپدیت میشه و مدیریت سایت زیاد وقت ندارن تشریف بیارن و چوابگو سوالات باشن

admin
۱۳۹۶/۱۱/۰۶
۰۳:۲۷

با سلام.
جدا از اینکه زمان زیادی صرف ایجاد مباحث جدید و یا توسعه بخش های وب سایت کلیدستان می شود، یک نکته مهم در پاسخ به سوالات موجود در نظرات کاربران و یا موضوع های ساخته شده در انجمن وب سایت کلیدستان وجود دارد، این نکته که بنده تنها زمانی به یک سوال پاسخ می دهم که اولا پاسخ آن را بدانم و دوما، دید کاملی به آن حوزه که در موردش سوال پرسیده شده، داشته باشم (جدا از داشتن زمان برای پاسخگویی).
یعنی حتی زمان هایی وجود داشته که پاسخ سوال را تا حدودی می دانسته ام، اما چون به حوزه مربوط به سوال، تسلط کامل نداشته ام، ترجیح داده ام که پاسخ ندهم تا مبادا پاسخ بنده ناقص و یا حتی غلط باشد.
بنابراین پاسخ ندادن به یک سوال، باید به این عنوان در نظر گرفته شود که مدیر وب سایت، ترجیح داده است که خود کاربر در آن زمینه تحقیق کند و قصد نداشته با ارائه یک پاسخ غلط و یا پاسخ ناقص، باعث ((گمراه کردن)) کاربر شود.
به هر حال، مهمترین وظیفه ما این است که اطلاعات صحیح در اختیار کاربر قرار دهیم و خود بنده مثلا در مباحث کدنویسی، تنها زمانی کدی را ارائه می دهم که شخصا آن را اجرا و آزمایش کرده باشم.
از تذکر شما ممنونم و سعی می کنیم که خدمات وب سایت کلیدستان روز به روز بهتر شود.  Flower


Flower

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)

جستجو در کلیدستان، توسط گوگل

جستجو در عنوان کلیدها

دسترسی سریع

کلید
×

شماره کلید


دسته بندی
×

شماره دسته کلید


جستجو
×

جستجو


کلمات کلیدی

راهنمای کلمات کلیدی (کلاس ها، توابع، عناصر و ...) در برنامه نویسی اندروید، بر اساس حرف اول کلمه کلیدی :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

developer.android.com