<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد مهدی طریقت</title>
        <link>https://virgool.io/feed/@tarighat</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 17:51:00</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/64909/avatar/avatar.png?height=120&amp;width=120</url>
            <title>محمد مهدی طریقت</title>
            <link>https://virgool.io/@tarighat</link>
        </image>

                    <item>
                <title>تردینگ در اندروید1</title>
                <link>https://virgool.io/baleacademy/android-threading-1-wsfdnuiruwqz</link>
                <description>به نام خداتردینگ در اندرویدبرای بحث تردینگ ابتدا در این مقاله سعی می‌کنیم مباحث اصلی تردینگ و main thread را توضیح دهیم و بعد در مقاله‌های بعدی، سراغ بست پرکتیس‌ها می‌رویم.mainThreadوقتی که اپلیکیشنی ران می‌شود، یک linux Process ایجاد می‌شود که به آن ترد اصلی نرم‌افزار یاmain thread می‌گوییم.تنها کار آن اجرای بلاک‌های مختلف استکه باید دقت کنیم فقط کارهای مربوط به ui را روی آن ترد انجام بدهیم.مِیْن ترد دوست دارد تسک‌هایش را در کمتر از شانزده میلی‌ثانیه انجام بدهد (شصت فریم بر ثانیه) تا کاربر احساس نکند لگ وجود دارد.دقیقاً زمانی که احساس می‌کنیم برنامه‌ای کند عمل می‌کند، به این دلیل است که صف این ترد این‌قدر شلوغ است و این‌قدر کارهای سنگین انجام می‌دهد که کارش بیشتر از این زمان (شانزده میلی‌ثانیه) طول می‌کشد.اگر این کندی به حدی زیاد بشود که تا بیش از پنج ثانیه طول بکشد، دیالوگی را نشان می‌دهد.Application Not Respondingو در اصطلاح می‌گوییم ANR رخ داده است.چه کارهایی را روی ترد اصلی انجام بدهیم؟{Ui object Create,Update,Destroy}انجام این فعالیت‌ها روی آبجکت‌های یوای , ترد امن (Thread safe) نیست،یعنی نمی‌توانیم این کدها را روی تردهای دیگر ران کنیم، کرش می‌کنیم یا ایرادهای دیگر به وجود می‌آید.چه کارهایی را روی ترد اصلی انجام ندهیم؟باید اصلی کلی را به خاطر بسپاریم و آن اینکه کارهای سنگین را روی ترد اصلی انجام ندهیم.این وظیفه‌ها را به تردهای دیگر بسپاریم.همین جا یک نکتۀ مهم وجود دارد:باید حتماً به تردها دیتای IMMUTABLE بدهیم و یک شیء را بین چند تا ترد به اشتراک نگذاریم ، چراکه ممکن است اتفاق‌های بدی بیفتد.ماندگاری ترد چطور باشد؟دو نوع ترد داریم:تردهای اول در نهایت فقط می‌خواهند روی یو ای اثر بگذارند.در اینجا اگر تا قبل از رسیدن جواب، ترد اکتیویتی از بین برود، لزومی ندارد ترد را بعد از بین رفتن اکتیویتی مربوط نگه داریم.از بین بردن این تردها معمولاً کار زجرآوری است و یادمان می‌رود، پس بهتر است از ابزارهایی مثل لایو دیتا استفاده کنیم، بدون اینکه دیگر نگران از بین رفتن این lifeCycle باشیم.برخی تردها هم کارهای دیگر می‌کنند که فرضاً برای ما کار مفیدی است. مثلاً دیتایی را کش می‌کنند یا دانلود می‌کنند. اینجا حتی اگر اکتیویتی بسته بشود، بهتر است این فعالیت ادامه پیدا کند و کارش را تمام کند. (البته باز هم به کسب‌وکار ما بستگی دارد.)اولویت‌بندی ترد THREAD PRIORITYمیزان اولویت تردها تا حد زیادی به lifeCycle و کسب‌وکار شما مربوط می‌شود.اما خوب است بدانیم اگر high Thread priority باشد،روی مِیْن ترد اثر می‌گذارد و به آن می‌گوییم: رندر ترد renderThreadو امکان دارد باعث افت فریم برنامه بشود.و اگر خیلی کم باشد، امکان دارد کار در اولویت خیلی پایینی انجام بشود و آن زمانی که بهش نیاز داریم، به دستمان نرسد.در اندروید، سیستم عامل ۹۵ درصد منبع دستگاه را اختصاص می‌دهد به foreground thread و فقط پنج درصد مربوط به background thread می‌شود.به‌طور معمول، اگر شما یک ترد را خودتان ایجاد کنید priority را از ترد والد ارث می‌برد، مگر اینکه شما آن را تغییر بدهید.setThreadPriorityاینجا می‌توانیم اولویت تردمان را مشخص کنیم.process.setThreadPriority-20 &lt;= ThreadPriority &lt;= 19کمترین اولویت 19 است و بیشترین اولویت -20برای راحتی thread یک اینترفیسی دارد برای ست کردن پرایرتی،Thread.priorityکه اینجا1 &lt;= Priority &lt;= 10به اصطلاح به این مقدار می‌گوییم: nice value.که در واقع مپی هست برای ست کردن process.setThreadPriorityترد مین normPrirority است و هر تردی که می‌سازیم، همچون والدش ترد مین است و به‌صورت دیفالت همین عدد پنج برایش تنظیم شده است.راه راحت‌ترراه راحت‌ترِ استفاده از ترد , استفاده از helper Classهاست.مثل coroutine برای کاتلین یا handler ، executorو... که ان‌شاءالله بعداً بیشتر راجع به این موارد هم توضیح می‌دهیم.چه مقدار ترد بسازیمکلاً ساخت ترد هزینۀ زیادی داردو باید توجه کرد که منابع ما هم محدود است. پس، بهتر است که تا جایی که می‌شود، کمتر ترد ایجاد کنیم.هر دیوایس می‌تواند تعداد محدودی ترد را هم‌زمان ران کند.از نگرانی‌های دیگری که برای تعداد زیادی ترد وجود دارد، این است که آن‌ها را آزاد نکنیم.این خودش عامل بدی می‌شود برای مموری لیک، چون هر ترد حداقل ۶۴ کیلو بایت رم مصرف می‌کند.(این‌ها را می‌توان با ابزاری مثل systrace آزمایش کرد و برنامه را در مقایسه با آن بهبود داد.)خیلی وقت‌ها برای اینکه تردی را اضافه نسازیم یا اینکه از یک ترد برای چند کار استفاده کنیم، باید از مفهومی به نام استخر تردها :) threadPool استفاده بکنیمکه این را هم می‌گذاریم برای مقالۀ بعدی ان‌شاءالله.ممنون از همراهی‌تان</description>
                <category>محمد مهدی طریقت</category>
                <author>محمد مهدی طریقت</author>
                <pubDate>Tue, 19 Jan 2021 12:33:25 +0330</pubDate>
            </item>
            </channel>
</rss>