Intereting Posts
Тонировка флажка на pre v21 Переключение между onItemClick и onItemLongClick событием Android ListView Как использовать 3G-соединение в приложении Android вместо Wi-Fi? Ошибка Android Preferences, «String нельзя передать в int» Добавление разрешений в AndroidManifest.xml в Android Studio? Ошибка анализа XML: несвязанный префикс в библиотеке Android: установите цвет CheckBox Как применять размер шрифта при рендеринге HTML-кода на Android или Java В чем основное различие между фрагментом и активностью? Какой код можно записать в фрагменте? Ошибка раздувания класса android.support.design.widget.CoordinatorLayout Android MediaPlayer Error (-38, 0) "остановить вызов в состоянии 0" Вкладка «Текст» открыта по умолчанию в Android Studio RecyclerView не перерабатывает представления, когда использует его внутри NestedScrollView YouTube api: не подключен. Вызовите connect () и дождитесь, когда onConnected () будет вызван Сортировка списка по возрастанию по дате из sqlite

В каких обстоятельствах Android Log.wtf прекратит мое приложение?

Я хотел бы регистрировать отчеты об ошибках для своего приложения на консоли ошибок Android Market; Похоже, я могу использовать Log.wtf для этого.

Документация для Log.wtf гласит:

Какая ужасная ошибка: сообщите о состоянии, которое никогда не должно происходить. Ошибка всегда регистрируется на уровне ASSERT с помощью стека вызовов. В зависимости от конфигурации системы отчет может быть добавлен в DropBoxManager и / или процесс может быть немедленно завершен диалоговым окном ошибки.

В моем случае я могу поймать эти исключения и восстановить их, показывая сообщение об ошибке; Я не хочу, чтобы мое приложение разбилось, но я хочу, чтобы отчет отправлялся на консоль ошибок.

При каких обстоятельствах Log.wtf прекратит мое приложение? Можно ли получить отчет об ошибке, не приводя к сбою приложения?

Solutions Collecting From Web of "В каких обстоятельствах Android Log.wtf прекратит мое приложение?"

Это зависит от ваших системных настроек (некоторые параметры могут быть включены для отладки, но отключены на обычных устройствах). Они настраиваются, когда андроид скомпилирован для устройства и, возможно, ядра.

Я бы предложил использовать Log.e () с префиксом вместо Log.wtf (), чтобы избежать каких-либо проблем, например WTF: Something terrible happened

Вот что происходит, когда вы вызываете Log.wtf ()

-> Log.java

 /** * What a Terrible Failure: Report an exception that should never happen. * Similar to {@link #wtf(String, Throwable)}, with a message as well. * @param tag Used to identify the source of a log message. * @param msg The message you would like logged. * @param tr An exception to log. May be null. */ public static int wtf(String tag, String msg, Throwable tr) { TerribleFailure what = new TerribleFailure(msg, tr); int bytes = println_native(LOG_ID_MAIN, ASSERT, tag, getStackTraceString(tr)); sWtfHandler.onTerribleFailure(tag, what); return bytes; } 

-> Log.java

 private static TerribleFailureHandler sWtfHandler = new TerribleFailureHandler() { public void onTerribleFailure(String tag, TerribleFailure what) { RuntimeInit.wtf(tag, what); } }; 

-> RuntimeInit.java

 /** * Report a serious error in the current process. May or may not cause * the process to terminate (depends on system settings). * * @param tag to record with the error * @param t exception describing the error site and conditions */ public static void wtf(String tag, Throwable t) { try { if (ActivityManagerNative.getDefault() .handleApplicationWtf(mApplicationObject, tag, new ApplicationErrorReport.CrashInfo(t))) { // The Activity Manager has already written us off -- now exit. Process.killProcess(Process.myPid()); System.exit(10); } } catch (Throwable t2) { Slog.e(TAG, "Error reporting WTF", t2); } } 

-> ActivityManagerNative.java

 public boolean handleApplicationWtf(IBinder app, String tag, ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(app); data.writeString(tag); crashInfo.writeToParcel(data, 0); mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; reply.recycle(); data.recycle(); return res; } 

После небкатской информации. Остерегайтесь использования WTF: уровень API устройства должен быть 8 или выше.