۱

چرا برنامه نویسی پایتون را یاد بگیرم؟

سلام. اینکه شما در حال مطالعه این مطلب هستید، نشون دهنده این هست که به برنامه نویسی علاقه دارید. اما در میان انبوهی از زبان های برنامه نویسی، باید با کدوم یکی شروع کرد؟ آسایاد قصد داره تا توی این مطلب شما رو با زبان برنامه نویسی پایتون که یکی از محبوب تری ...

۲

mvc چیست؟

فرض کنیم که از mvc برای طراحی یک سایت می خواهیم استفاده کنیم: یک سایت یک سری صفحات دارد که همان view ها در این معماری است. یک سایت دیتابیس دارد، در معماری mvc یک سایت علاوه بر دیتابیس نیاز به یک سری مدل (کلاس) دارد که می تواند دقیقا مطابق با دیت ...

۲۲

ارسال آرگومان ها به روش ارجاع در ++C

آرگومانها را می توان به کمک ارجاع ارسال کرد. این بدان معناست که شما آدرس متغیری را ارسال می کنید نه مقدار آن را. ارسال با ارجاع زمانی مفید است که شما بخواهید یک آرگومان که دارای مقدار بزرگی است (مانند یک آبجکت) را ارسال کنید. در این حالت وقتی که آرگومان ا ...

Get current GPS location in Android

آموزش فعال کردن GPS در اندروید

مقدمه‌ای در رابطه با فعال کردن GPS در اندروید واژه GPS مخفف عبارت “Global Positioning System” به معنای “سیستم موقعیت یاب جهانی” است. به موجب وجود این قابلیت در گوشی‌های هوشمند، این دستگاه‌ها قادرند تا ضمن ارتباط برقرار کردن با ماهواره‌های سیستم موقعیت یا ...

۴

طرز کار صفحات وب

در این لحظه که مشغول مطالعه این مقاله هستید قطعا: ۱- پشت کامپیوتر خود نشسته اید! ۲- در حال استفاده از یک مرورگر وب هستید تا بتوانید این مقاله را بخوانید. این مرورگر وب می تواند اینترنت اکسپلورر، فایرفکس، کروم، Opera، و یا Netscape باشد. ۳- می خواهید طر ...

۶

آشنایی با API و کاربرد آن در برنامه نویسی

در صورتی که اندکی با برنامه نویسی آشنایی داشته باشید و یا حوزه فعالیت شما در زمینه تکنولوژی اطلاعات باشد حتما تا کنون واژه وب سرویس یا API را شنیده اید و برایتان سوال بوده است که وب سرویس چیست و چه کاربردی دارید؟ وب سرویس (API)  وب سرویس را به زبان سا ...

۱

معرفی enum در زبان برنامه نویسی جاوا

همان طور که پیش از این توضیح داده شد، متغیری از جنس boolean زمانی مورد استفاده قرار می گیرد که دو حالت بیشتر پیش روی ما وجود نداشته باشد. حال اگر ما در شرایطی قرار بگیریم که بیش از دو حالت پیش روی ما باشد مسلماً از این نوع متغیر نخواهیم توانست استفاده کنی ...

۳

AsyncTask در اندروید چیست؟

ترد اصلی UI اندروید

اندروید رخدادهای ورودی یا تسک‌ها را در یک تک ترد (Thread) رابط کاربری (UI) مدیریت می‌کند که به این ترد، ترد اصلی (Main Thread) گفته می‌شود. ترد اصلی نمی‌تواند چند عملیات همزمان را مدیریت کند و فقط یک رخداد را در هر لحظه پردازش می‌کند.

پردازش همزمان در اندروید

اگر رخدادها ورودی یا تسک‌ها به صورت همزمان اجرا نمی‌شوند تمام کدهای یک اپلیکیشن اندروید روی ترد اصلی خواهد بود و هر خط کد یکی پس از دیگری اجرا خواهد شد. فرض کنید شما یک عملیات طولانی مدت را انجام می‌دهید، برای مثال دسترسی پیدا کردن به منابعی از طریق اینترنت (مثل عکس، MP3 یا JSON). در این‌صورت تا هنگامی که عملیات مورد نظر انجام نشود اپلیکیشن از کار خواهد افتاد. برای داشتن یک تجربه کاربری خوب در اپلیکیشن‌های اندروید، تمام تسک‌ها یا عملیاتی که بالقوه هستند باید به صورت ناهمگام(asynchronous) اجرا شوند. چند مثال از تسک‌های زمان‌بر:
  1. دسترسی به منابع از طریق اینترنت
  2. عملیات روی دیتابیس
  3. فراخوانی‌های وب‌سرویس
  4. منطق پیچیده که زمان زیادی برای اجرا می‌خواهد
  • AsyncTask در اندروید

AsyncTask چیست؟

AsyncTask یک کلاس انتزاعی اندروید است که به اپلیکیشن‌های اندروید کمک می‌کند تا ترد اصلی UI را به صورت مؤثر مدیریت کنند. کلاس AsyncTask به ما امکان می‌دهد تا تسک‌های زمان‌بر را اجرا کرده و حاصل را روی ترد اصلی بدون تأثیر گذاشتن روی آن نمایش دهیم.

چه‌موقع از AsyncTask استفاده کنیم؟

فرض کنیم شما یک اپلیکیشن ساده ساخته‌اید که یک فایل MP3 را هنگام اجرای برنامه از اینترنت دانلود می‌کند. نمودار وضعیت زیر مجموعه عملیاتی را نشان می‌دهد که وقتی اپلیکیشنتان را اجرا می‌کنید اتفاق می‌افتند.
همچنان‌که دانلود فایل از سرور در حال انجام است، اپلیکیشن غیر قابل استفاده می‌شود تا زمانی که ترد اصلی منتظر اتمام عملیات دانلود است. برای مواجه با این‌گونه مشکلات می‌توانیم یک ترد جدید بسازیم و متد run آن را بگونه تغییر دهیم که این فراخوانی شبکه را اجرا کند دقیقاً شبیه کاری که معمولاً در برنامه‌های عادی جاوا انجام می‌دهیم. درنتیجه UI پاسخگو باقی می‌ماند. به‌ این علت که toolkit رابط کاربری اندروید thread safe نیست، پیاده‌سازی این مسأله با چند ترد ممکن است خود مشکلات اضافی جدیدی را وقتی سعی کنیم UI را طبق نتایجی که از اجرای عملیات دانلود بدست می‌آید آپدیت کنیم، ایجاد کند. اندروید تمام این مشکلات را درنظر داشته و کلاس اختصاصی‌ای را به نام «‌AsyncTask» ساخته تا تسک‌ها و عملیاتی را که نیاز است در پس‌زمینه به صورت ناهمگام اجرا شوند، مدیریت کند.
نکته : AsyncTask فقط باید برای تسک‌های استفاده شود که تنها چند ثانیه طول می‌کشند، بعضی تسک‌ها ممکن است ترد را برای مدت زیادی در حال اجرا نگه‌دارند در این صورت این تسک‌ها باید به‌وسیله پکیج «java.util.concurrent» مدیریت شوند.

چگونه AsyncTask پیاده‌سازی می‌شود؟

۱ داخل یک کلاس Activity یک زیرکلاس بسازید و آن را از کلاس AsyncTask مشتق کنید همانگونه که در زیر نشان داده شده:
{
{

۲ بسادگی تسک را با فراخوانی متد execute اجرا کنید:

چهار مرحله AsyncTask

وقتی یک تسک ناهمگام از ترد اصلی UI اجرا می‌شود از چهار مرحله می‌گذرد:

  • onPreExecute :

قبل از اجرای تسک فراخوانی می‌شود، در تئوری قبل از اینکه متد «doInBackground» روی تردUI فراخوانی شود.این متد اغلب برای آماده‌سازی اجرای تسک استفاده می‌شود (مثل نمایش نوار پیشرفت در رابط کاربری)

  • doInBackground:

کدهایی که اجرای آن‌ها زمان‌بر است باید در این متد نوشته شوندوقتی متد execute در ترد اصلی UI فراخوانی شد این متد با پارامترهایی که به آن ارسال شده اجرا می‌شود.

  • onProgressUpdate:

متدdoInBackground در هرلحظه با فرخوانی «publishProgress» این متد را اجرا می‌کنداین متد می‌تواند برای نمایش پیشرفت کار به هر صورت، در رابط کاربر استفاده شود.

  • onPostExecute:

وقتی پردازش محاسبات پس‌زمینه در متد «doInBackground» پایان یافت فراخوانی می‌شودنتایج«doInBackground» به این متد فرستاده می‌شوند.

  • کنسل کردن تسک

تسک می‌تواند با فراخوانی متد cancel(boolean) کنسل شوداجرای این متد باعث فراخوانی‌های بعدیisCancelled() خواهد شد تا پاسخش true شودبعد از اجرای این متد به جای متد onPostExecute() متدonCancelled(Object) فراخوانی می‌گردد.

AsyncTask – قوانینی که باید دنبال شوند

  1. کلاس AsyncTask باید در ترد UI بارگذاری شود.
  2. نمونه تسک باید در ترد UI ساخته شود.
  3. متد «execute(Params…)» باید در ترد UI فراخوانی شود.
  4. متدهای onPreExecute(), onPostExecute(Result), doInBackground(Params…), onProgressUpdate(Progress…) نباید به صورت دستی فراخوانی شوند.
  5. هر تسک فقط می‌تواند یک بار اجرا شود(اگر تلاش برای اجرای دوباره یک تسک صورت گیرد یک exception ارسال خواهد شد)
...
۷

از مقایسه JSON و XML دست بردارید

JSON یا XML؟ کدامیک بهتر است؟ کدامیک سریع‌تر است؟ کدامیک را باید در پروژه استفاده کنم؟ بس کنید! JSON و XML قابل مقایسه نیستند. مثل این است که یک دوچرخه را با BMW مقایسه کنید. واقعا کدامیک بهتر است؟ در بعضی از شرایط یک دوچرخه خیلی بهتر عمل خواهد کرد. ام ...

۱

آموزش ساخت AlertDialog

برای اینکار اول یک پروژه در اندروید استودیو بسازید. آلرت دیالوگ سه بخش اصلی داره : ۱- setTitle : عنوان آلرت دیالگمون. ۲- setMessage : پیغامی ک در آلرت دیالگمون نمایش داده میشود. ۳- setIcon : آیکونی ک در بالای آلرت دیالگمون قرار میگیرد. بریم سراغ آموز ...