В чем разница между сбоем и заморозкой? - PullRequest
1 голос
/ 30 марта 2012

Я заглянул в консоль разработчика и впервые увидел отчет о заморозке, а не сбой. Сбой легко определить точку разрыва из трассировки стека. Обычно это приводит к неправильному определению или реализации класса / метода.

Однако я никогда не сталкивался с заморозками. Так как Google приложил усилия, чтобы провести различие в консоли разработчика, в чем различие?

С общей точки зрения очевидно, что крушение - это сила, близкая. Но замедление просто замедляет пользовательский опыт без принудительного закрытия? Каковы технические отличия? Есть ли другой метод для решения проблемы замораживания по сравнению со сбоем?

Редактировать: добавлен пример трассировки стека.

Вот пример Crash Трассировка стека очень специфично указывает на линию сбоя.

android.view.InflateException: Binary XML file line #21: Error inflating class android.widget.ZoomControls
at android.view.LayoutInflater.createView(LayoutInflater.java:518)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
at android.view.LayoutInflater.inflate(LayoutInflater.java:383)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at android.widget.ZoomButtonsController.createContainer(ZoomButtonsController.java:262)
at android.widget.ZoomButtonsController.<init>(ZoomButtonsController.java:211)
at android.webkit.WebView.getZoomButtonsController(WebView.java:6313)
at android.webkit.WebView.startDrag(WebView.java:5700)
at android.webkit.WebView.onTouchEvent(WebView.java:5428)
at android.view.View.dispatchTouchEvent(View.java:3885)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)

Вот пример Freeze трассировка стека менее специфична, не указывая на прямую линию или активность по ошибке.

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x40027550 self=0xcfc0
  | sysTid=2076 nice=0 sched=0/0 cgrp=bg_non_interactive handle=-1345006240
  | schedstat=( 30958526727 7780212297 24174 )
  at android.graphics.Bitmap.nativeCreateScaledBitmap(Native Method)
  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:556)
  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:722)
  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:478)
  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
  at android.content.res.Resources.loadDrawable(Resources.java:1727)
  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
  at android.view.View.<init>(View.java:1998)
  at android.widget.TextView.<init>(TextView.java:389)


     at android.widget.Button.<init>(Button.java:108)
      at android.widget.Button.<init>(Button.java:104)
  at java.lang.reflect.Constructor.constructNative(Native Method)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
  at android.view.LayoutInflater.createView(LayoutInflater.java:505)
  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224)
  at android.app.Activity.setContentView(Activity.java:1702)
  at com.e3h.usmcknowledge.MainActivity.onCreate(MainActivity.java:37)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3242)
  at android.app.ActivityThread.access$1600(ActivityThread.java:132)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1037)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:143)
  at android.app.ActivityThread.main(ActivityThread.java:4196)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  at dalvik.system.NativeStart.main(Native Method)

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Там действительно нет формального определения. Но, в общем, сбой происходит, когда происходит неконтролируемая ошибка. Замораживание происходит, когда приложение перестает отвечать на какое-либо событие (например, бесконечный цикл), но не происходит никакой реальной ошибки (исключение не выдается).

0 голосов
/ 30 марта 2012

В общем, сбой - это неожиданный, ненормальный выход. Заморозка или зависание происходят, когда программа (или вся система) перестает отвечать полностью.

...