PDA

View Full Version : تاخیر در بارگذاری آبجکت های اکتیویتی



nimaaamin
سه شنبه 06 شهریور 1397, 11:35 صبح
سلام دوستان
من ی اکتیویتی دارم که توش تعداد 120 تا 130 تا آبجکت گذاشتم(EditText,TextView,Spinner,TableLayout , ...)
وقتی میخوام این اکتیویتی رو باز کنم قدری زمان میبره تا فرم آماره استفاده بشه، یا مخصوصا وقتی کیبور باز میشه و دوباره میخوای ببندی محددا زمان میبره تا فرم آماده اسفاده بشه
ی راه کاری یا روشی که بتوان در وحله اول همه آبجکت ها لود نشه(مثلا 30 لود بشه) بعد تعداد بعدی و الی اخر
لطفا راهنمای

farhad_shiri_ex
سه شنبه 06 شهریور 1397, 12:34 عصر
سلام دوستان
من ی اکتیویتی دارم که توش تعداد 120 تا 130 تا آبجکت گذاشتم(EditText,TextView,Spinner,TableLayout , ...)
وقتی میخوام این اکتیویتی رو باز کنم قدری زمان میبره تا فرم آماره استفاده بشه، یا مخصوصا وقتی کیبور باز میشه و دوباره میخوای ببندی محددا زمان میبره تا فرم آماده اسفاده بشه
ی راه کاری یا روشی که بتوان در وحله اول همه آبجکت ها لود نشه(مثلا 30 لود بشه) بعد تعداد بعدی و الی اخر
لطفا راهنمای

اگر همه این آبجکتها را درون یک لایه قرار داده باشید وقتی تو اکتیویتی این لایه را لود کنید همه ویجت ها را بارگذاری میکنه ! البته این کارهم که اصلا درست نیست و performance اکتیویتی بشدت پایین میاد.
میتونید از ویجتهای لیستی هست مثل recycler view که می تونید ویجت ها را با اولویت نمایش بدید و تکنیک های lazy loading هم استفاده کنید البته باید شرایط استفاده از این ویجت را هم داشته باشید
اگر تمام این ویجت ها به هم مرتبط هستند و از ویجتهای مختلف استفاده کرده باشید قاعدتا نمی تونید از این لیست ها استفاده کنید. یا بهتر بگم فرض کنید که یک فرم دارید که توی اون 30 تا تکست باکس دارید که باید اطلاعاتش را ذخیره کنید خوب بالطبع بهترین کا استفاده از یک لیست هست تا اینکه بخواهید همه این 30تا تکست ویو را تو یک لایه نمایش بدید پس نتیجه این که اگر همه ویجت ها یکسان هستند تکنیک خوبی هست در غیر اینصورت خیر.
به هر حال برای طراحی لایه ای که اینهمه ویجت داشته باشه بهتر هست که به چندین بخش تقسیم کنید و هر یک از بخشها را جداگانه نمایش بدید و در زمان نمایش هم لود کنید تا سربار هم کمتر بشه وگرنه همونطوری که عرض کردم از نظر تکنیکی هم کار درستی نیست اینهمه ویجت را بر روی یک اکتیویتی نمایش بدید! تا اونجاهم که یادم هست خود اندروید استودیو بهتون هشدار میده که تعداد ویجت ها خیلی زیاد هست فکر کنم سقف ویجت هایی که تو یک لایه میتونید نمایش بدید 80 بود.

nimaaamin
سه شنبه 06 شهریور 1397, 18:43 عصر
ممنونم از وقتی که گذاشتین
یک فرم آماربرداری که باید چیزی حدود 100 تا 120 آیم از کاربر پرسیده بشه و وارد بشه از spinner گرفته تا edittext
چیزی از fregment میدونید میتونه توی این مسئله کمکم کنه(من چیز زیادی ازش نمیدونم)

farhad_shiri_ex
چهارشنبه 07 شهریور 1397, 08:19 صبح
ممنونم از وقتی که گذاشتین
یک فرم آماربرداری که باید چیزی حدود 100 تا 120 آیم از کاربر پرسیده بشه و وارد بشه از spinner گرفته تا edittext
چیزی از fregment میدونید میتونه توی این مسئله کمکم کنه(من چیز زیادی ازش نمیدونم)


دوست عزیز !
فرگمنت ها در حقیقت یک کلاس پوشاننده برای اکتیویتی هستند که برخی مشکلات اکتیویتی را پوشش میدن !
البته اگر بخواهید از تکنیکی که خدمتتون عرض کردم استفاده کنید و یک اکتیویتی را به بخش های مختلف تقسیم کنید هم می تونید از فرگمنت ها استفاده کنید!
1- تعریف یک لایه اصلی در اکتیویتی که شامل یک view pager به عنوان root element باشه !
2- تعریف هر لایه جدا برای هر فرگمنت که هر لایه میتونه تا 10 - 15 ویجت را در خودش داشته باشه!
3- تعریف یک کلاس fragmentManager با ارث بری از fragmentAdapter
4- در زمان لود اکتیویتی نمایش اولین فرگمنت که می تونید به دورش انجام بدید با استفاده fragmentSupportManager و fragmentTransaction و اضافه کردن داینامیک فرگمنت در زمان اجرا به سویچر و اکتیویتی و روش دوم هم می تونید یک کلاس که از fragmentAdapter ارث بری کرده باشه بسازید و فرگمنتها را براساس نام و اولویت در این کلاس کپسوله کنید و عملیات اضافه کردن و حذف کردن فرگمنت ها به سویچر را به کلاس parent بسپارید.
عملیات اضافه کردن فرگمنت ها را می تونید درضمن تغییر page ها مدیریت کنید هم سرعت خوبی خواهید داشت هم اصول شی گرائی را هم رعایت کردید به طوریکه برای اینکه در آینده بخواهید هر ویجتی اضافه کنید ویا تغییری بدید به راحتی این کار انجام میشه و نیازی به تغییرات زیادی نخواهید داشت. و همچنین لایه های رابط کاربری هم که ایجاد میکنید به هم وابسته نخواهند بود و در هر لایه به راحتی میتونید تغییر ایجاد کنید بدون نگرانی از تست های رگرسیون.