Как получить трассировку стека во время работы андроида

Мое приложение не ведет себя так, как я ожидаю. После того, как устройство перейдет в режим сна (черный экран) и включится, устройство отобразит экран моего приложения, но через некоторое время часть экрана исчезнет – вкладка viewpager, которая находится под панелью инструментов.

Я поставил точку прерывания в последнюю точку, где мое приложение ничего не делает, и экран все еще прекрасен, поэтому это то, что делает система, но я не знаю, что.

Есть ли способ включить трассировку стека, чтобы тот самый метод, который система использует с этой точки, записывается в журнал, и, возможно, это позволит мне узнать, почему скрытый просмотрщик исчезает?

Я должен упомянуть, что приложение все еще функционирует нормально, и я могу открыть навигационный ящик с панели инструментов и использовать все его функции, но я больше не могу видеть вкладку viewpager, пока не заново его создаю.

    Android Studio включает отладчик, который позволяет отлаживать приложения, запущенные на эмуляторе Android или подключенном устройстве Android. С помощью отладчика Android Studio вы можете:

    Выберите устройство для отладки вашего приложения. Установите точки останова в вашем коде. Изучите переменные и оцените выражения во время выполнения.

    Для получения дополнительной информации посетите https://developer.android.com/studio/debug/index.html.

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

    Log.d("DERP", "check out my stack trace", new RuntimeException()); 

    Если вы можете правильно восстановить журналы, скорее всего проблема может быть решена. Как упоминалось выше, logcat – хороший вариант.

    Усовершенствованное решение может быть эффективной системой регистрации, которая будет захватывать все журналы. Вы можете записать их в локальный файл для дальнейшего использования.

    JugWharton's Hugo – такая потрясающая библиотека, где вам нужны только небольшие модификации, используя аннотации @DebugLog . Это позволит записывать журналы приложений и печатать в лог-кате.

    Ваш bundle.gradle (Module:app) должен быть изменен следующим образом

     apply plugin: 'com.android.application' apply plugin: 'hugo' android { compileSdkVersion 24 buildToolsVersion "23.0.3" ....... Other configurations 

    В bundle.gradle (Project) они должны присутствовать

     buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.2' classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' } } 

    Чтобы сделать hugo track, необходимо добавить в @DebugLog приложений @DebugLog . Например, в ваших методах класса. Вы можете найти это в примере hugo

    Теперь, чтобы вернуть журналы, выполните следующие действия.

    Следующий код не должен ничего делать с библиотекой hugo, он просто будет записывать журналы из logcat.

    Inside и AsyncTask выполните следующие действия и запишите содержимое в файл и проверьте их.

      @Override protected String doInBackground(Void... voids) { String responseString = null; try { Process process = Runtime.getRuntime().exec("logcat -b main -d"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); String line; StringBuilder log=new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { log.append(line); log.append('\n'); log.append("-----------"); } responseString = log.toString(); } catch (Exception e) { } return responseString; } 

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

    Вы также можете попробовать использовать Runtime.getRuntime().exec("logcat -d");

    Удачи, попробуй. !!

    Возможны 2 вещи. Во-первых, вы делаете что-то в onResume (некоторые сетевые хиты и / или обновление ui). Второй – это воссоздание активности. Таким образом, вы можете протестировать свое приложение, не включив его. Это поможет вам определить точную проблему.