روزی که اندروید Dead شد

آره درست خواندید روزی که اندروید (یا به قول یکی از دوستان آندروید) مرد. این مورد تو یکی از اپلیکیشن ها پیش آمد گفتم اینجا هم بگم که شاید کسی نجات داد . می خواید بپرسید داستان از کجا شروع شد؟ دقیقا از هاکی اپ از تصویر پایین.

احتمالا اول به نظر کسی چیز مهمی نمیاد و ازش میگزرید. خوب هیچ اطلاعات درستی از محل خطا نیست نه متد نه حتی سرنخی از علت اتفاق. چیزی که شاید کمی عجیب بود لیست دیوایس های مشکل دار بود.

کم کم تعداد خطا ها هم بیشتر شد و کمی نگران کننده شد. هنوز هم به جز لیست دستگاه ها اطلاعاتی از محل خطا نبود. چند روز شانس روی خوش نشون داد و روی یکی از شبیه سازها خودم شاهد این خطا شدم. خطا که نبود بیشتر شبیه بمب بود.

وقتی اپلیکیشن باز میشد گوشی ری استارت میشد.آره خطا یا کرشی درکار نبود و گوشی ریست میشد و در اخر شاهد لاگ DeadSystemException بودیم. کمی بالاتر چند خط لاگ بود که تو هاکی اپ نبود.این چند خط به کلاس channel notification داخل اندروید اشاره داخل اندروید اشاره میکرد و خطای از index=1 با یک آرایه به طول ۰ میداد. با توجه به تغییرات اپلیکیشن که همین notification channel هم بود تصمیم گرفتیم اون قسمت اپلیکیشن تست کنیم.بعد از تست قسمت های مختلف فهمیمدیم مشکل از این خط کد هستش.

createOrUpdateChannel(1000000, "ChannelName", AppConstant.DEFUALT_LED_COLOR, longArrayOf(),Uri.parse(Uri.decode(ringtone)))

این خط کد برای ساخت و به روز کردن کانال نوتکیفکشن استفاده میشد و مشکلش اون longArrayOf بود که توش الگوی ویبره هستش. برای بعضی از کانال ها الگوی ویبره وجود نداشت و ما یک ارایه خالی با طول ۰ ارسال کرده بودیم. ظاهرا در بعضی از گوشی ها این کار باعث خطا در اندروید و ریست شدن گوشی میشه! جالبترین قسمتش ریست شدن گوشی بود شخصا فکر نمیکردم همچین خطایی بشه تو اندروید ایجاد کرد.