سلام دوستان لطفا راهنمایی بفرمایید:
من یه برنامه ساختم که بوسیله یک سری دکمه یه کارهایی مثلا( invisible, enabled,chang background)روی یک سری ویو انجام میشه
برنامه برای ورود به هر اکتیویتی یک مکث چند ثانیه ای میکنه و بعد وارد میشه و گاهی force close میده و در logcat ارور میده:
"Skipped x frames! The application may be doing too much work on its main thread"
خیلی سرچ کردم گویا مشکل از طولانی شدن عملیات های ترید اصلیه ولی چطور بفهمم مشکل از کدوم قسمت کدهام هست که سنگینه؟؟؟!!!!
سلام.
یک راه حل برای تعیین زمان اجرای هر بخش از کدها این است که پیام هایی را برای نمایش در LogCat ، بعد از اجرای هر بخش مهم از کدها، طراحی می کنید، که در متن پیام ها، زمان بر اساس میلی ثانیه را هم می نویسید. بنابراین با مشاهده LogCat و بررسی زمان ها، متوجه می شوید که هر بخش تا چه حد زمان بر می باشد.
برای نمایش پیام در LogCat ، کلید زیر را بخوانید (برای Eclipse توضیح داده شده، اما در Android Studio نیز مشابه می باشد) :
کلید شماره 2719
دقت شود که باید کدهای زمان بر را با AsyncTask اجرا کنید تا در یک Thread جداگانه اجرا شوند. به عنوان مثال، در کلید زیر، یک مثال از AsyncTask وجود دارد :
کلید شماره 312
نکته :
وقتی کدی را در Thread ای غیر از Thread اصلی (Main Thread) اجرا می کنیم، آنگاه چون تنها Thread اصلی می تواند UI برنامه اندروید (رابط گرافیکی آن) را تغییر دهد، بنابراین اگر قرار است کدها تغییراتی را در UI برنامه اندروید ایجاد کنند، باید بر اساس کلید زیر عمل کنید :
کلید شماره 2858
با تشکر از پاسخگویی شما
مورد اول رو برای متدهای مختلف یک اکتیوتی انجام دادم به این صورت:
مثلا :
کد پیاچپی:
public void onCreate(Bundle savedInstanceState) {
long start = System.currentTimeMillis();
...
...
...
long elapsedTimeMillis = System.currentTimeMillis()-start;
Log.d("mytag",String.valueOf(elapsedTimeMillis));
یک انیمیشن داشتم در on creat که 1500ms زمان میبرد و حذفش کردم زمان متد oncreat به حدود 50ms کاهش یافت ولی skipp 250 frame از بین نرفت و همچنان مکث چند ثانیه ای برای باز شدن اکتیویتی!!!
سوال : آیا درست انجام دادم و اگر بله مشکل از چیه؟؟
با سلام
راه دیگه ای ( غیر از بدست آوردن زمان متدها) برای فهمیدن علت مکث های چند ثانیه ای در هنگام ورود به صفحه جدید(اکتیویتی جدید) و ارور
skipped frame در logcat وجود داره؟؟؟