کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

مسائل و مشکلات کارایی سیستم اندروید-android

تجزیه و تحلیل مسائل و مشکلات کارایی سیستم اندروید

در این مبحث به مسائلی همچون ابزار موجود که می توان از آن ها برای بررسی و تحلیل کارایی و قابلیت های برنامه های کاربردی اندروید استفاده کرد, پرداخته می شود .

فهرست محتوا

1. یک بررسی اجمالی

2. StrictMode

3. امکانات Developer Settings

4. ابزار Lint

5. تمرین : Lint

6. نمایش گر گرافیکی Traceview

  • مقدمه ای بر Traceview
  • استفاده از Traceview در محیط برنامه نویسی Eclipse
  • دسترسی و بهرگیری از Traceview از طریق خط فرمان / command line

7. تمرین : Traceview

  • ایجاد یک نمونه پروژه
  • اجرای عملیات ردیابی (trace)
  • حل کاستی های مرتبط با کارایی

8. hierarchy viewer

9. تمرین : Hierarchy Viewer

10. بهینه سازی طرح بندی (layout optimization)

11. رونوشت از حافظه (memory dump)

12. Systrace

13. Pixel Perfect perspective

14. شبیه سازی تراکم پیکسلی و وضوح تصویر

15. قالب / Template های اندروید

16. Profile GPU rendering(تحلیل و اندازه گیری زمان پردازش هسته ی کارت گرافیک)

17. تجزیه و تحلیل وضعیت Overdraw (ترسیم مجدد)

تجزیه و تحلیل وضعیت Overdraw (ترسیم مجدد)

این مسئله از اهمیت زیادی برخوردار است که برنامه ی اندروید تمامی عملیات لازمه را با سرعت هرچه تمام تر اجرا کند . مقاله ی آموزشی پیشرو کلیه ی ابزار موجود ویژه ی پیگیری و بهینه سازی اپلیکیشن های اندروید را لیست می کند .

StrictMode

همان طور که پیش تر بارها یادآور شدیم, شما باید تا حد امکان از اجرای عملیات طولانی و سنگین در نخ رابط کاربری (UI thread) خودداری کنید . این امر شامل دسترسی به فایل و شبکه می شود .
جهت کسب اطمینان از وقوع این امر می توان از StrictMode بهره جست . StrictMode از رابط برنامه سازی کاربردی 9 به بعد (API) (که معادل آن ویرایش 2.3.3 می باشد) برای برنامه نویس قابل استفاده می باشد. این قابلیت امکان نصب و تنظیم سیاست های نخ (policy thread) ویژه ی برنامه ی کاربردی مورد نظر و مطابق با نیاز را فراهم می کند .
با استفاده از StrictMode می توان به سیستم اندروید فرمان داد در صورتی که برنامه ی مربوطه به اجرای عملیات سنگین و طولانی پرداخت آن را به طور ناگهانی از کار بیاندازد, به عنوان مثال می توان به ورودی / خروجی (I/O) در نخ رابط کاربری اشاره کرد .
کد ذیل نحوه ی استفاده از StrictMode را به شما آموزش می دهد .

package de.vogella.android.strictmode;
 
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
 
public class TestStrictMode extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Activate StrictMode
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectAll()
        .detectDiskReads()
        .detectDiskWrites()
        .detectNetwork()
         // alternatively .detectAll() for all detectable problems
        .penaltyLog()
        .penaltyDeath()
        .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
         .detectLeakedSqlLiteObjects()
         .detectLeakedClosableObjects()
        // alternatively .detectAll() for all detectable problems
        .penaltyLog()
        .penaltyDeath()
        .build());
   
    // Test code
    setContentView(R.layout.main);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String eol = System.getProperty("line.separator");
    try {
      BufferedWriter writer =
          new BufferedWriter(new OutputStreamWriter(openFileOutput("myfile",
              MODE_WORLD_WRITEABLE)));
      writer.write("This is a test1." + eol);
      writer.write("This is a test2." + eol);
      writer.write("This is a test3." + eol);
      writer.write("This is a test4." + eol);
      writer.write("This is a test5." + eol);
      writer.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
} 

توجه داشته باشید که Strictmode را تنها می توان حین فرایند برنامه نویسی و توسعه پیاده کرد و نه در یک اپلیکیشن زنده و در حال اجرا .

امکانات Developer Settings

Developer Settings در بخش تنظیمات (Settings) مربوط به اپلیکیشن های گوشی اندروید, اجازه ی تنظیم و انتخاب پیکربندی هایی را می دهد که تجزیه و تحلیل کارایی برنامه را آسان سازی می کند. به طور مثال می توانید قابلیت هایلایت یا برجسته سازی نواحی لمس شده را فعال سازی کنید .
چنانچه گوشی دردسترس شما ویرایش 4.2 اندروید بر روی آن نصب شده, در آن صورت باید به بخش About در تنظیمات (settings) مراجعه کرده, سپس المان (entry) Build number را 7 بار فشار دهید .
اگر گوشی شما چنین گزینه ی را ندارد, می توانید از شبیه ساز برای این منظور استفاده کنید .
در برخی موارد شاید لازم باشد که برنامه ی کاربردی مورد نظر را مجدداً راه اندازی کنید تا تنظیمات انتخابی جدید اعمال گردد .

ابزار : Lint

ابزار lint که مختص اندروید است, در واقع یک وسیله برای تجزیه و تحلیل کد ایستا (static code) ویژه ی برنامه های کاربردی یا همان اپلیکیشن های اندروید می باشد . Lint بررسی هایی را ارائه می دهد که توسط خط فرمان (command line) و Eclipse پشتیبانی شده و اشکال های بالقوه و احتمالی را چک می کند, همچنین امکان بهینه سازی کارایی برنامه های اندروید را موجب می شود.
برخی از بررسی های پیش ذکر شده به صورت پیش فرض توسط Eclipse صورت می گیرد . به منظور اجرای چک یا بررسی های فعال lint در محیط Eclipse بر روی برنامه ی کاربری مورد نظر, ابتدا روی پروژه ی مربوطه راست کلیک کرده سپس گزینه ی Android Tools → Run Lint: Check for Common Errors. را انتخاب کنید .
می توان هشدارهای تولید شده را در Lint Warning view مشاهده کرد.
در بخش تنظیمات (preferences) محیط Eclipse می توانید بررسی های lint (lint checks) را تحت Window → Preferences → Android → Lint Error Checking پیکربندی (configure) و تنظیم کنید.
البته این امکان نیز وجود دارد که lint را از خط فرمان (command line) راه اندازی و اجرا کنید .

# run lint check for myproject
lint myproject 

تمرین : Lint

یک بررسی جامع lint روی پروژه ی دلخواه خود انجام دهید . سعی کنید تمامی خطاها و هشدارهای صادر شده را برطرف کنید .

Traceview

مقدمه ای بر Traceview

Traceview در حقیقت یک ابزار گرافیکی (graphical viewer) جهت مشاهده و پیگیری ثبت وقایع (log) توسط اپلیکیشن اندروید می باشد. با استفاده از Traceview می توان کیفیت و کارایی برنامه های کاربردی اندروید را سنجید تا از این طریق تمامی کاستی ها و مشکلات برنامه شناسایی شوند .
Traceview به عنوان یک ابزار مستقل و مجزا از دیگر تجهیزات در پوشه ی tools نصب جعبه ابزار توسعه و طراحی نرم افزاری اندروید (Android SDK) موجود می باشد. این قابلیت همچنین از طریق ابزار طراحی و توسعه ی اندروید (ADT) در محیط Eclipse گنجانده شد .

استفاده از Traceview در محیط برنامه نویسی Eclipse

Eclipse ازطریق (یک ابزار قدرتمند ویژه ی اشکال زدایی برنامه های کاربردی اندروید / سرنام Dalvik Debug Monitor server) DDMS perspective به طور مستقیم از قابلیت ردیابی (tracing) پشتیبانی می کند.
جهت ردیابی (tracing) برنامه ی کاربردی, پروسه های اپلیکیشن خود را در Devices view انتخاب کرده, سپس دکمه یStart Method Profiling را همان گونه که در تصویر زیر به نمایش گذاشته شده انتخاب کنید.

 مسائل و مشکلات کارایی سیستم اندروید-android

حال برنامه ی خود را استفاده کنید و همان دکمه را مجدداً فشار داده تا فرایند profiling (تحلیل یک برنامه به منظور تعیین مدت زمانی که طی اجرای آن در بخش های مختلف صرف شده است) متوقف شود . این کار یک (editor) باز می کند که نتایج ردیابی (tracing) را برای شما به نمایش می گذارد .


مسائل و مشکلات کارایی سیستم اندروید-android
مسائل و مشکلات کارایی سیستم اندروید-android

می توان با بزرگنمایی تصویر جزئیات بیشتری را مشاهده کرد, جهت خارج شدن از حالت بزرگنمایی (کوچک نمایی) روی جدول زمانی (time line) دوبار کلیک کنید .

دسترسی و بهرگیری از Traceview از طریق خط فرمان / command line

برای ردیابی (tracing) کد مورد نظر, تکه کد (code snippet) زیر را پیرامون آن قرار دهید .

android.os.Debug.startMethodTracing("yourstring");
 
// ... your code is here
 
android.os.Debug.stopMethodTracing(); 

پارامتر "yourstring" به سیستم اطلاع می دهد که باید اطلاعات مربوطه را تحت "/sdcard/yourstring.trace" ذخیره کند . به منظور ذخیره سازی اطلاعات یا داده های مورد نظر روی sdcard, برنامه به مجوز WRITE_EXTERNAL_STORAGE نیاز دارد . پس از راه اندازی برنامه می توان نتایج حاصله را از دستگاه به وسیله ی ابزار خط فرمان adb (Android Debug Bridge / پل اشکال زدایی اندروید) کپی کرد.

adb pull /sdcard/yourstring.trace
traceview yourstring 

این کار Traceview را راه اندازی کرده که به شما اجازه می دهد داده های مربوطه به کارایی را به شیوه ی گرافیکی (با بهره گیری از ابزار گرافیکی) تجزیه و تحلیل کنید . DDMS view نیز دارای یک دکمه ی ردیابی (trace button) می باشد. این کار برنامه ی در حال اجرا را ردیابی کرده و به اجازه ی اضافی نیازی ندارد .

تمرین : Traceview

ایجاد یک نمونه پروژه

یک برنامه ی کاربردی اندروید با پکیج سطح بالای (top level) com.vogella.android.traceview ایجاد کنید .
کلید ذیل را به فایل values/strings.xml اضافه کنید .




                Traceview Example
                Settings
                Hello world!
                Random number: %1$s
 

اکنون فایل طرح بندی (layout file) زیر به نام rowlayout.xml را ایجاد کنید .




                
                
                

                

        
    
                

                

 

Adapter زیر را برای ListView خود پیاده سازی کنید (بکار ببرید).

package com.vogella.android.traceview;
import java.util.Collections;
import java.util.List;
import android.content.Context;
import android.content.res.Resources;
import android.os.Debug;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class MyArrayAdapter extends ArrayAdapter {
 
  private List values;
  private Context context;
 
  public MyArrayAdapter(Context context, List values) {
    super(context, R.layout.rowlayout);
    this.context = context;
    this.values = values;
  }
 
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    Debug.startMethodTracing("getViewOfTrace");
    // Ensure sorted values
    Collections.sort(values);
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.rowlayout, parent, false);
    Resources res = context.getResources();
    String text = String.format(res.getString(R.string.number_template),
        values.get(position));
    CharSequence styledText = Html.fromHtml(text);
    TextView textView = (TextView) view.findViewById(R.id.textView3);
    textView.setText(styledText);
    Debug.stopMethodTracing();
    return view;
  }
} 

یک ListView در activity مورد نظر پیاده سازی کنید که امکان نمایش 1000 رشته ی تصادفی تولید شده را فراهم می کند .

package com.vogella.android.traceview;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
public class MainActivity extends ListActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    List list = createValues();
    MyArrayAdapter adapter = new MyArrayAdapter(this, list);
    setListAdapter(adapter);
  }
  private static List createValues() {
    SecureRandom random = new SecureRandom();
    List list = new ArrayList();
    for (int i = 0; i < 1000; i++) {
      String string = new BigInteger(130, random).toString(32);
      list.add(string);
    }
    return list;
  }
} 

در مرحله ی آخر مجوز نوشتن یا ذخیره سازی داده را روی حافظه ی خارجی به اپلیکیشن خود بدهید .

اجرای عملیات ردیابی (trace)

برنامه ی خود را اجرا کنید, سپس از طریق adb به دستگاه خود متصل شده و ردیابی کارایی (performance trace) را در درایو خود کپی کنید . اکنون نتیجه ی حاصله را تجزیه و تحلیل کنید .

حل کاستی های مرتبط با کارایی

کارایی را بر اساس نتیجه ی حاصله از سنجش Traceview بهبود ببخشید . ذیل تعدادی توصیه ی مفید مبنی بر اینکه چه چیزهایی را باید بهبود بخشید فهرست شده :

  • حروف درشت و پررنگ را در تابع getView() با خصیصه (attribute) android:textStyle="bold مربوطه در طرح کلی (layout) مورد نظر جای گزین کنید تا بدین وسیله از فراخوانی متد Html.fromHtml() جلوگیری شود .
  • مرتب سازی (sorting) را به مکان دیگری انتقال دهید .
  • اگر null نبود, convertView را مجدداً در Adapter خود مورد استفاده قرار دهید .
  • با استفاده از HolderPattern در ListView خود از فراخوانی متد findViewById() جلوگیری کنید .
نکته:

شِمای کلی (layout) در این تمرین بهینه سازی نشده . این تمرین را بار دیگر در تمرین مربوط به HierarchyView مورد استفاده قرار می دهیم .

hierarchy viewer

Hierarchy View perspective به برنامه نویس امکان متصور سازی (تبدیل داده ها به تصویر ویدیویی = visualize) سلسله مراتب view برنامه ی کاربردی اندروید را داده و به وی در امر شناسایی لایه های (layer) غیر ضروری موجود در سلسله مراتب مذکور کمک می کند.
به منظور باز کردن Hierarchy View باید طبق این دستور العمل اقدام کنید :
Window → Open Perspective → Other... → Hierarchy View
در Windows view می توان آن پروسه یا فرایندی که می خواهید سلسله مراتب view را برای آن تجزیه و تحلیل کنید انتخاب کنید.


مسائل و مشکلات کارایی سیستم اندروید-android

نسخه ی تجزیه و تحلیل شده ی layout فعال جاری را زیر مشاهده می کنید .


مسائل و مشکلات کارایی سیستم اندروید-android

نمایش درختی سه لامپ یا نقطه ی روشن را برای view ها نشان می دهد . اولین لامپ نشانگر زمانی است که صرف محاسبه ی اندازه ی view می شود, لامپ دوم زمانی که برای ایجاد طرح کلی (layout) مورد استفاده قرار می گیرد را نمایش می دهد و سومین لامپ نیز ترسیم view را نشان می دهد . کارهایی که عملکرد سنگین و فشرده ی دارند با چراغ زرد یا قرمز نمایش داده می شوند .

تمرین : Hierarchy Viewer

برای این تمرین از همان مثال بخش "ایجاد پروژه ی آزمایشی" استفاده کنید . Hierarchy View perspective را باز کرده و لایه ی view را تجزیه و تحلیل کنید.
با اینکه هیچ یک از لایه های طرح کلی (layout layer) عملکرد یا کارایی انبوه و فشرده ی ندارند, دربردارنده ی لایه ها و view های غیرضروری و بلااستفاده زیادی هستند . آن لایه های غیرضروری را کاملاً حذف کنید .

بهینه سازی طرح کلی (layout optimization)

توصیه می شود طرح کلی خود را حتماً بهینه سازی کنید . مثال زیر نمونه ی را ارائه می دهد که در آن نحوه ی بکارگیری FrameLayout به همراه ImageView و یک TextView نمایش داده شده . این مثال همچنین از امکان قراردهی TextView در طرح کلی و سبک بندی بخش هایی از محتوای متن به طور متفاوت استفاده می کند .


مسائل و مشکلات کارایی سیستم اندروید-android

سبک دهی textView با TextAppearanceSpan پروژه ی به نام com.vogella.android.textview.spannablestring ایجاد کنید .
دو سبک (style) جدید به فایل styles.xml اضافه کنید .


    
                
 
    
                
                
                
 

طرح کلی زیر را ایجاد کنید .


 
                

                

 

متن خود را در TextView از طریق TextAppearanceSpan های مجزا درست مشابه کد زیر سبک بندی (style) کنید .

package com.vogella.android.textview.spannablestring;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.TextAppearanceSpan;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView textView = (TextView) findViewById(R.id.input);
    String header = "This is the header";
    String description = "This is the description";
    Spannable styledText = new SpannableString(header + "\n" + description);
    TextAppearanceSpan span1 = new TextAppearanceSpan(this,
        R.style.textHeader);
    TextAppearanceSpan span2 = new TextAppearanceSpan(this,
        R.style.textbody);
    styledText.setSpan(span1, 0, header.length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    styledText.setSpan(span2, header.length() + 1, header.length() + 1
        + description.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(styledText);
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
} 

طرح کلی که در نتیجه ی عملیات فوق تولید شده نسبت به طرح کلی که مبنای آن RelativeLayout می باشد به طور قابل چشمی گیری سریع تر و کارامدتر است . سبک بندی HTML نیز از آنجایی که تجزیه گر (parser) HTML سنگین تلقی می گردد در این طرح بندی بکار گرفته نشده است .

رونوشت از حافظه (memory dump)

همچنین می توان از حافظه تصویر لحظه ای (memory snapshot) ایجاد کرده و آن را با Eclipse Memory Analyzer تجزیه و تحلیل کرد .

Systrace

Systrace این قابلیت را فراهم می کند که کارایی را مستقیم در سطح هسته اصلی (kernel level) بسنجید. جهت فعال سازی آن, به Developer options مراجعه کرده و مدخل (entry) Enable traces را انتخاب کنید. در محاوره ی (dialog) بعدی می توانید نوع رخدادهایی را که باید profile شوند را تعریف کنید, به عنوان مثال Graphics و. Views


مسائل و مشکلات کارایی سیستم اندروید-android
مسائل و مشکلات کارایی سیستم اندروید-android

به منظور استفاده از systrace , یک terminal را باز کرده و systrace.py را از پوشه (directory) android_sdk_installdir/tools/systrace اجرا کنید .
همچنین می توان Systrace را مستقیماً از طریق DDMS perspective راه اندازی کرد .


مسائل و مشکلات کارایی سیستم اندروید-android
مسائل و مشکلات کارایی سیستم اندروید-android

Systrace رخدادها را به مدت 5 ثانیه ضبط می کند. در نتیجه Systrace یک فایل HTML ایجاد کرده که به شما امکان تجزیه و تحلیل مشکلات بالقوه و احتمالی را می دهد .

Pixel Perfect perspective

اگرچه Pixel Perfect perspective ربط چندانی به کارایی ندارد, با این وجود بسیار مفید تلقی می گردد. Pixel Perfect perspective به شما اجازه می دهد صفحه نمایش برنامه ی کاربردی در حال اجرا را روی محیط شبیه ساز یا دستگاه انروید نمایش داده و تصویر آن صفحه را بزرگنمایی کنید

شبیه سازی تراکم پیکسلی و وضوح تصویر

شما می توانید با استفاده از خط فرمان تراکم های پیکسلی و وضوح تصویر دستگاه های متفاوت را شبیه سازی کنید .
این امر به شما این امکان را می دهد که دستگاهی با تراکم یا چگالی پیکسلی و وضوح تصویر بالا را برای شبیه سازی دیگر دستگاه ها مورد استفاده قرار دهید .

// Set the display size
adb shell am display-size 600x800
// Set the display density
adb shell am display-density 80 

قالب / Template های اندروید

برنامه نویس می تواند قالب های خود را برای برنامه ی راهنما / ویزارد ایجاد پروژه ی اندروید Android project creation) wizard) بوجود بیاورید . با مراجعه به لینک های زیر می توانید به مطالبی بیش در رابط با این مبحث دست پیدا کنید :

Roman Nurik: https://plus.google.com/113735310430199015092/posts/XTKTamk4As8
Official documentation: https://dl.dropbox.com/u/231329/android/templatedocs/index.html
Additional code templates - https://github.com/jgilfelt/android-adt-templates

Profile GPU rendering (تحلیل و تعیین زمان پردازش هسته ی کارت گرافیک)

در Developer options (در بخش تنظیمات / Settings دستگاه اندروید) می توان قابلیت Profile GPU rendering را فعال سازی کرد .
با فعال سازی این گزینه سیستم قادر خواهد بود زمانی که صرف ترسیم 128 قاب (frame) شده را دنبال (track) کرده و اندازه گیری کند .
پس از فعال سازی این گزینه و راه اندازی مجدد برنامه می توان با استفاده از دستور (command) زیر به اطلاعات مورد نظر دست یافت .

 adb shell dumpsys gfxinfo your_package 

جهت اندازه گیری فریم (frame rate) برنامه ی مورد نظر, برای مثال پیمایش (scroll) بر روی یک list view . در بیشتر موارد برای اینکه کاری کنیم برنامه خود را مجدداً ترسیم کند, باید با اپلیکیشن مورد نظر تعامل برقرار کنیم .
در فایل گزارش (log) ی که حاصل می شود, کافی است به دنبال بخشی به نام Profile data in ms بگردید .

تجزیه و تحلیل وضعیت Overdraw (ترسیم مجدد)

Overdrawزمانی رخ می دهد که چیزی روی چیز دیگری ترسیم شود. برای مثال یک activity به عنوان پس زمینه یک Window دارد. در صورتی که یک TextView به اپلیکیشن اضافه گردد, TextView روی Window ترسیم می شود.
بدین ترتیب قرار است که وضعیت overdrawn رخ دهد. البته این را هم باید گفت که به منظور افزایش کارایی باید از overdraw (ترسیم مجدد) غیرضروری خودداری کرد .
Overdraw غیرضروری عمدتاً ناشی از سلسه مراتب های پیچیده ی نما (complex view hierarchy) است. به طور کلی یک overdraw 2x (به این معنا که پیکسلی 3 بار ترسیم می شود) امری کاملاً استاندارد است, در عین حال توصیه می شود از استفاده از آن خودداری کنید .
می توانید با مراجعه به Development Settings و انتخاب Show GPU overdraw متصور سازی (visualization) وضعیت overdraw (ترسیم مجدد) را فعال سازی کنید . این بخش بر اساس تعداد overdraw ها رنگ های مختلف را به صفحه نمایش شما اضافه می کند . جدول زیر طرح رنگ (color schema) های بکاررفته را توصیف می کند :

جدول 1.

رنگ
مفهوم
No color
No overdraw (هیچ ترسیم مجددی صورت نمی گیرد)
Blue
,1x overdrawیک پیکسل دوبار ترسیم می گردد
Green
2x
Light red
,3x نواحی کوچک قرمز هنوز صحیح است, ممکن است نشانگر خطا یا مشکلی باشد .
Dark red
4x, پیکسل 5 بار یا حتی بیشتر کشیده می شود, نشانگر وجود مشکلی است

پس از متصور سازی نواحی مشکل زای بالقوه, شما می توانید سلسله مراتب View خود را با Hierarchy Viewer تجزیه و تحلیل کنید .

1394/08/11 5657 2718
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...