لوگو عباس اویسی

متولد تهران، توسعه دهنده‌ی اندروید، پیگیر فوتبال. ارشد نرم افزار و علاقمند به جنبه‌های مختلف توسعه‌ی نرم افزار

  • عمومی
  • اندروید
  • جنریتور حلما
  • فریم‌ورک dagger
  • وب‌سرویس آموزشی فیلم‌ها

رفع باگ – دوباره ساختِ شدن اکتیویتی در زمان چرخش گوشی

فروردین ۲۸, ۱۳۹۶

آدم هر چقدر از مظلومیت برنامه‌نویسای اندروید بگه، کم گفته. حداقل یک روز کامل درگیر این بودم که چرا اکتیویتی پخش کننده‌ی ویدیو توو برنامه‌ام، موقع چرخش گوشی دوباره از اول ساخته میشه😐.  وقتی مشکل رو حل کردم، به سه دلیل تصمیم گرفتم که داستانش رو کامل بنویسم: ۱- با گفتنِ رنجی که کشیدم، آروم‌تر بشم😃 ۲- شاید به برنامه‌نویس‌های تازه‌کار کمک کنه که در مواجهه با مشکلات چیکار کنند ۳- اگر در آینده کسی همین مشکل منو داشت، بتونه با خوندن این پست درستش کنه.

 این داستان از یک روز معمولی و آفتابی شروع شد. پیش خودم گفتم حالا که وقت دارم، برم سراغ اپلیکیشن ویدیو ورزش ۳ – غیر رسمی و بعد مدت‌ها روش کار کنم. قسمت‌هایی که نیاز به اصلاح داشت رو تغییر دادم و شروع به تست اپلیکیشن کردم. همه چی درست بود و لبخند رضایت روو لبام نقش بسته بود☺️ اما یهو متوجه شدم صفحه‌ی پخش ویدیو، موقع چرخش گوشی دوباره ساخته میشه😐.

اولش خونسردیمو حفظ کردم و تصمیم گرفتم از مهمترین سلاح برنامه‌نویس‌ها استفاده کنم. با استفاده از clean build، دوباره پروژه رو بیلد کردم ولی مشکل حل نشد😐.  دومین کار انکار حقیقت بود، احتمال دادم که شبیه‌ساز اندروید خرابه و گذاشتم بعدا با گوشی تست کنم. البته نیم ساعت بعدش با حقیقت تلخی روبرو شدم و اپلیکیشن روو گوشیمم مشکل داشت.

دیگه بیخیال خونسردی شدم و متعجب شدم😳. چون تغییراتی که توی کد دادم، اصلا ربطی به قضیه چرخش گوشی نداشت! پس چرا اپلیکیشن به مشکل خورده بود؟!😔.

سومین کار این بود که چک کردم مشکل از configChanges اکتیویتی توی مانیفست اندروید نباشه و کد‌های جاوا رو هم دوباره دیدم. از سومین کار هم به نتیجه‌ای نرسیدم.

در چهارمین تلاش یاد Git افتادم. پروژه در دو تا commit قبلی درست بوده، پس تصمیم گرفتم تغییرات بخش‌هایی که شک دارمو خط به خط چک کنم. بعد بررسی بخش‌های مختلف کد، به تفاوت نسخه‌‌های کتابخونه‌ی ساپورت و compileSdkVersion در دو پروژه شک کردم. سرتون رو درد نیارم دیگه، عدد‌هارو دونه دونه جا به جا میکردم تا ببینم مشکل از چیه. خود این قضیه باز مشکلاتی پیش آورد که یکیش با این لینک حل شد.

بالاخره همون تلاش چهارم به نتیجه رسید، در نهایت بعد یک ساعت فهمیدم که اگر نسخه‌ی کتابخونه‌ی ساپورت بشه ۲۴ !! این مشکل بوجود میاد ولی چون در دوتا commit قبلی ۲۳ بوده، مشکلی پیش نمیومده. بسیار خوشحال، شاد و شنگول شدم☺️☺️. حالا در گام پنجم باید میفهمیدم کجای کدم غیر استاندارد هست که در نسخه‌های جدید کتابخونه‌ی ساپورت، اپلیکیشن مشکل پیدا میکنه.

داکیومنت اندروید رو خوندم و سرچ هم کردم، همه چی ظاهرا درست بود. یهو عبارت زیر به ذهنم رسید و دکمه‌ی سرچ رو دوباره زدم.

عبارت طلایی= appcompat rotation recreate

در همون صفحه‌ی اول نتایج، چشمم به لینک “Issue 220378 – android – activity always being recreated on rotation” خورد. رفتم خوندمش و فهمیدم بله!!!!!! متهم اصلی کتابخونه‌ی ساپورت هست😡. کامنت سوم این لینک، یک راه‌حل موقتی ( ترجمه workaround نمیدونم چیه)  پیشنهاد داده بود “اضافه کردن uiMode به configChanges تا مشکل حل بشه”. انجام دادم و درست شددددد🥂😃.

همین ۶حرفی که در عکس زیر باید اضافه میشد(uiMode) ، از من یک روز زمان گرفت!!!!!!

abbas

تا به اشتراک گذاری مشکل یا بدبختی بعدی، خدانگهدار😃.