Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ваш 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 отслеживание журналов приложений @DebugLog, необходимо добавить. Например, в ваших методах класса. Вы можете найти это в образ hugo

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

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

Внутри и 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");

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

Ответ 4

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