מסיבת הצלה

משתמשים רבים תלויים מאוד בטלפונים שלהם, וזקוקים למכשיר תקין בכל זמן. עם זאת, לפעמים המכשירים נכנסים ללופים של הפעלה מחדש, וכתוצאה מכך המשתמשים שולחים כרטיסי תמיכה או שואלים לגבי האחריות. התהליך הזה מתסכל את המשתמשים ומאוד יקר ליצרני המכשירים ולספקים.

מערכת Android 8.0 כוללת תכונה ששולחת 'צוות הצלה' כשהיא מזהה שרכיבי ליבה של המערכת תקועים בלולאות קריסה. לאחר מכן, צוות התמיכה של Rescue Party יבצע סדרה של פעולות כדי לשחזר את המכשיר. כמפלט אחרון, Rescue Party מפעיל מחדש את המכשיר למצב שחזור ומבקש מהמשתמש לבצע איפוס להגדרות המקוריות.

מסמך ההגדרה של תאימות ל-Android לא מחייב את התכונות האלה, אבל עדיין כדאי להשתמש בהן כדי לצמצם את מספר בקשות התמיכה.

הטמעה

התכונה Rescue Party מופעלת כברירת מחדל ב-Android 8.0, וההטמעה שלה נמצאת ב-/services/core/java/com/android/server/RescueParty.java. Rescue Party מקבל מידע על אירועי אתחול וקריסה, והוא מתחיל אם:

  • השרת system_server מופעל מחדש יותר מ-5 פעמים ב-5 דקות.
  • אפליקציית מערכת מתמידה קורסת יותר מ-5 פעמים ב-30 שניות.

כשמתגלה אחת מהסיטואציות האלה, צוות התמיכה מעביר את הבעיה לרמה הבאה, מעבד את המשימה שמשויכת לרמה הזו ומאפשר למכשיר להמשיך כדי לראות אם הוא מתאושש. בכל רמה, המערכת מנקה או מאפסת יותר ויותר נתונים. ברמה האחרונה, המשתמש מתבקש לאפס את המכשיר להגדרות המקוריות.

אין צורך בתמיכה מיוחדת בחומרה כדי לתמוך ב-Rescue Party. אם ההטמעה תתבצע, מערכת השחזור של המכשיר תצטרך להגיב לפקודה --prompt_and_wipe_data, והמכשירים יצטרכו לספק למשתמשים דרך לאשר את השמדת נתוני המשתמש לפני שהם ימשיכו בתהליך. מערכת השחזור אמורה גם לתת למשתמש אפשרות לנסות להפעיל מחדש את המכשיר.

מכיוון שכל רמת הצלה יכולה להוסיף עד 5 דקות לפני שהמכשיר יהיה שוב פעיל, יצרני מכשירים לא צריכים להוסיף רמות הצלה בהתאמה אישית. ככל שהמשתמשים משתמשים יותר זמן במכשיר שלא פועל, כך יש סיכוי גבוה יותר שהם ייצרו פנייה לתמיכה או פנייה בנוגע לאחריות במקום לנסות לשחזר את המכשיר בעצמם.

אימות

כל אירועי החילוץ מושבתים כשיש למכשיר חיבור נתונים פעיל ב-USB, כי זה סימן חזק לכך שמישהו מנקה באגים במכשיר.

כדי לבטל את ההחרגה הזו, מריצים את הפקודה:

adb shell setprop persist.sys.enable_rescue 1

משם אפשר להפעיל לולאת קריסה של מערכת או ממשק משתמש.

כדי להפעיל לולאת קריסה ברמה נמוכה של system_server, מריצים את הפקודה:

adb shell setprop debug.crash_system 1

כדי להפעיל לולאה של קריסה ברמה בינונית ב-SystemUI, מריצים את הפקודה:

adb shell setprop debug.crash_sysui 1

שתי לולאות הקריסה מפעילות את הלוגיקה של תהליך החילוץ. כל פעולות החילוץ מתועדות גם ביומני PackageManager הקבועים שמאוחסנים ב-/data/system/uiderrors.txt, לצורך בדיקה ותיקון באגים מאוחר יותר. היומנים הקבועים האלה נכללים גם בכל דוח באג בקטע 'הודעות אזהרה לגבי חבילה'.