At android app activitythread performlaunchactivity activitythread java 2646

RuntimeException when launch my app #21

Comments

nicopasso commented Apr 17, 2016

Hi,
my app crashes with this stack trace.

I’ve already tried to implement

in my StartingActivity as the stack trace says but still I have the same issue.

How can I solve this problem?
Thanks

The text was updated successfully, but these errors were encountered:

frogermcs commented Apr 17, 2016

AndroidDevMetrics should be initialized in Application class, not Activity (it’s too late if you would do this).

Here is example code:

nicopasso commented Apr 17, 2016

Yes yes I’ve done that of course 🙂

novalu commented May 5, 2016 •

I have same issue with 4.0, getting that runtime exception.

I’ve tried AndroidDevMetrics.initWith(this); and MethodsTracingManager.getInstance().init(this); in Application onCreate() but with no success.

I have errors only in version 0.4, version 0.3.1 is working. Thanks.

tokou commented Jun 24, 2016

I have the same issue with 4.0

It crashes when I do not initialize it. It shouldn’t it should just do nothing.

This behavior was correct in 0.3.1

Max01010101010101 commented Jul 26, 2016

Me too. uff.. i would like to test AndroidDevMetrics

ar-g commented Aug 25, 2016

It crashes when I put

on top of onCreate of all initializations, but it fine when I put it at the end. It appears that it clashes with some other initialisations. I can say that I have other ActivityLifecycleListeners might be because of it.

drd commented Dec 11, 2017

The plugin for android dev metrics assumes you will be using it for any debug build. I ran into this issue because I was disabling it when certain properties were passed to gradle. In order for this to work, I did following:

build:

In app/build.gradle , conditionally apply plugin based on a property passed through gradle (could be any condition of course):

If the tool is disabled, add a debugCompile dependency on the noop package:

If you do not have an Application subclass for Debug builds:

Only initialize AndroidDevMetrics for debug builds:

Источник

Приложение вылетает при переходе на 3-е Activity

Вылетает примерно через 30 минут (при переходе в нет, в стим, или вообще простотак но при переходе)
Здравствуйте у меня windows вылетает на синий экран, внизу появляется отсчет до 100 потом он сам.

Ошибка при переходе на новое Activity
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? При переходе на новое активити.

При переходе на предыдующую Activity — пустота
Здравствуйте, Имеются 3 activity (Poets, Poems, PoemText). На первом из БД вытаскиваются имена.

Сохранение введенных данных при переходе на другой activity
Здравствуйте, такая ситуация, есть два активити, 1-Форма добавления клиента в базу, 2-Активити для.

выше скинул лог ошибки, уже на прямую подключил телефон и тоже самое, при переходе на 3-е активити , всё тухнет.. на эмуляторе по прежнему всё хорошо.. при этом 50 на 50, на некоторых телефонах всё ок.
Прошу помочь разобраться в ситуации =)

Читайте также:  Андроид не показывает всю оперативную память

Добавлено через 2 часа 47 минут
Решил проблему путём добавления таких строк в манифест и сжал изображения .. на сколько я понял проблема заключалась в размере и типе использованных изображений.
ответ нашёл тут: решение проблемы =)

Программа выдаёт ошибку при переходе в новую activity
При переходе в новую activity приложение вылетает. ниже приведен код того самого activity package.

Подскажите у кого происходит вылет при переходе на Activity
java.lang.NullPointerException java.lang.RuntimeException: Unable to start activity.

Как сохранить текст с EditText при переходе на другую Activity?
проблема такая что не могу реализовать EditText сохраняет данные в буфер или еще куда-то при.

Вылетает activity при заполнении ArrayList
Всем привет, у меня выбивает из приложения (android studio) в момент заполнения ArrayList с базы.

Программа вылетает при переходе на ListActivity
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Моя программа просто вылетает.

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было.

Источник

Как Android запускает MainActivity

Недавно я провел исследование о main() методе в Java и то, как он служит точкой входа для любого приложения Java. Это заставило меня задуматься, а как насчет Android-приложений? Есть ли у них основной метод? Как они загружаются? Что происходит за кулисами до выполнения onCreate()? Майкл Бэйли очень подробно рассказал о том, как работает Main Thread, так что это быстрый обзор его доклада плюс дополнительная информация из Android Open Source Project (AOSP).

В этой статье мы рассмотрим:

  1. Что происходит от нажатия на иконку приложения до запуска MainActivity
  2. Найдем основной метод приложения и узнаем, как основной поток (он же UI, он же Main Thread) получает свое назначение.
  3. Рассмотрим роль, которую играют Looper & Handler в передаче сообщений, которые в конечном итоге приводят к созданию вашей Activity.

Что происходит при запуске приложения

1 Схема запуска приложения

Между вызовом метода main() и onCreate() в нашем MainActivity примерно 15 шагов, и в этой статье мы пройдем по ним. На рисунке 1 изображена общая схема запуска приложения, показывающая различные классы взаимодействия сверху и соответствующую цепочку методов. Шаги пронумерованы, и когда я обращаюсь к ним, я буду использовать следующие обозначения Process3 или Process14


Рисунок 1: Схема запуска приложения по шагам от вызова main() до onCreate() в MainActivity

2. Класс ActivityThread

В классе ActivityThread чуть более 6500 строк. Для краткости я определил самые важные для нас части. Давайте рассмотрим, что делает этот класс и связанный с ним основной метод, чтобы запустить нашу Activity

Рисунок 2: Метод main() в ActivityThread, который служит точкой входа для запуска вашего приложения.

Как видно в коде: метод main() выполняет три важных дела:

1. Подготавливает основной Looper (MainLooper) (Process 2)
2. Настройка Handler’a (Process 4)
3. Вызов метода Looper.loop() в главном потоке (MainThread) (Process 6)

2.1 Подготовка main looper (Process 2–3)

Основной Looper задается вызовом Looper.prepareMainLooper() (см. Строку 8 в коде). Это отмечает текущий случайный поток, который выполняет всю работу по вызову метода main() в качестве основного потока приложений. Именно так и именно здесь определяется знаменитый главный поток для приложения в Android!

2.2 Вызов Handler’a (Process 4-5)

Внутри класса ActivityThread существует приватный внутренний класс H, да-да, все верно, просто H, который наследуется от класса Handler (см. рис. 4 и 7). В 12й строке экземпляр H-обработчика устанавливается как главный Handler потока. Что очень интересно знать о классе H, как вы сами увидите позже, это то, что он содержит более 50 определений состояния/событий, в которых может находиться ваше приложение, например LAUNCH_ACTIVITY, PAUSE_ACTIVITY, BIND_SERVICE и т.д.

2.3 Вызов метод loop() у Looper’а (Process 6–7)

После назначения главного потока в этом же главном потоке, для того чтоб мы могли в нем что-то выполнять, вызывается метод Looper.loop() (см. Строку 20). Это начинает выполнение сообщений в очереди сообщений Loopers. Теперь главный поток запущен и может начать обработку задач из очереди.

Читайте также:  What is keystore in android

Обратите внимание, что в строке 18, если выполнение кода пойдет дальше чем Looper.loop() в 17 строке вдруг и приложение выйдет из цикла, то будет брошено исключение RuntimeException. Это говорит о том, что метод loop() в идеале никогда преждевременно не заканчивается. Мы увидим как это в следущем разделе.

3. Бесконечный loop() в Looper’е (Process 7,8,9)

Рисунок 3: Код внутри метода loop() в классе Looper’e

Как мы видим в коде, в методе Looper.loop() есть очередь сообщений (строка 10) и внутри цикла вызывается queue.next(). MessageQueue заполняется Handler-‘ом, о котором мы говорили в предыдущем разделе (см. Process 8). Обратите внимание на интересное описание условия в цикле for — здесь нет аргументов, только две точки с запятой говорят что это бесконечный цикл. Поэтому Looper в идеале никогда не заканчивается, если данное сообщение не null.

Итак, теперь мы определили главный поток, выполняемый благодаря Looper, мы также видели, что Handler добавляет сообщения в цикл Looper.loops() и обрабатывает сообщения. Давайте посмотрим, как они вместе вызывают нашу Activity.

4. Запуск MainActivity (Process 10 to 15)

Важно помнить, что этот бесконечный цикл и обработка сообщений выполнялись в main() методе класса ActivityThread, потому что именно там они были вызваны (см. в коде строки с 12 по 17). Мы поверхностно просмотрели Loopers, MessageQueues и Handlers, чтобы вникнуть в контекст. Итак, давайте вернемся к классу ActivityThread, в частности, к внутреннему классу H, о котором мы говорили ранее, который действует как основной Handler главного потока.

Итак, у нас есть Looper, передающий сообщения нашему Handler’у, давайте узнаем, как эти сообщения обрабатываются. Это делается внутри класса H. Этот класс содержит метод handleMessage(Message msg). Помните, что все классы, которые наследуются от Handler, должны переопределить этот метод.

Рисунок 4: Приватный внутренний класс H и его handleMessage() метод

Как видно в коде, в 8й строке есть оператор switch, в котором определяется обработка входящего сообщения по его содержимому.

Один из случаев (cases) включает в себя запуск активности (строка 11), что интересно, так это то, что этот метод предназначен для обработки около 50 случаев, которые варьируются от возобновления, приостановки, запуска Activity, привязки Service’ов, обработки Receiver’ов, предоставления предупреждений lowMemory или trimMemory, когда память устройства заполняется и т. д.

В case LAUNCH_ACTIVITY вызывается метод handleLaunchActivity(), как показано в строке 13, см Process11 на схеме. Затем этот метод вызывает другой метод, называемый performLaunchActivity(), который возвращает объект Activity (см. Рис. 5, строка 7).

Рисунок 5: Метод handleLaunchActivity() в котором создается Activity

Метод performLaunchActivity() добавляет в Activity важную информацию, такую как Instrumentation, Context, Component, а также Intent; а также задает Application. Затем этот метод вызывает Instrumentation.callActivityOnCreate() (Process 13), который является последним этапом перед вызовом метода onCreate() в Activity (Process 14-15, см. Рисунок 5 (код), строки 8-10).

Рисунок 6: Класс Instrumentation наконец запускает Activity

На данный момент ваша Activity загружена c множеством полезных переменных и методов, которые можно использовать для создания вашего нового удивительного приложения для Android! Все это благодаря ActivityThread, умной работе Handler’a и Looper’a, и огромному классу Activity в 7600 строк кода, который позволяет аттачить фрагменты, получить контекст и легко управлять View’s — и много еще чего.

Источник

java.lang.RuntimeException на android.app.ActivityThread.performLaunchActivity

В консоли Google Play возникает java.lang.RuntimeException без » Причины: «

Приведенный ниже журнал скопирован из журнала сбоя консоли Google Play.
Это для: Android 8.0, Android 8.1, Android 7.0, Android 7.1

Пожалуйста, помогите мне в этом!

ОТВЕТЫ

Ответ 1

ActivityThread.java говорит, что он updatePendingConfiguration() или registerOnActivityPausedListener(), поэтому он либо не работает с .onPause() , либо не вызывает метод super() с правильными аргументами — или что-то еще не так с применяемым Configuration .

Я бы с радостью объяснил, как решить проблему, но в вопросе отсутствует код, который выдает исключение. Лучшим способом решения этой проблемы может быть использование чего-то похожего Firebase Crashlytics, чтобы можно было увидеть, откуда именно это исходит и на какие устройства влияют (в случае, если это должно быть конкретным). Я почти подозреваю, что это может быть вызвано запуском Activity с приложением Context , а не установкой флага Intent.FLAG_ACTIVITY_NEW_TASK (см.: этот ответ).

Читайте также:  Как получить значение checkbox android

Ответ 2

Из анализа журнала можно сделать следующие предположения:

Исключение выдается в любой из внешних библиотек используется в проекте

Объяснение: По сути, исключение выдается ActivityThread.java , более конкретно, метод performLaunchActivity() в строке 2955 выдает исключение. Поскольку трассировка стека не включала в себя внутреннее class вашего приложения, мы можем предположить, что исключение выдается в внешнем class , который поставляется вместе с библиотекой, которую вы используете в своем проекте.

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

  • Изучите все зависимости библиотеки и подозрительные уценки
  • Если вы используете настраиваемое представление (например, AdView) из внешней библиотеки, эта библиотека, скорее всего, вызовет этот сбой
  • Обновите все сторонние библиотеки до последней версии, поскольку сбой в последних ОС вызывает
  • Посмотрите в официальной документации, чтобы правильно реализовать эти библиотеки. Например, страница устранения неполадок на веб-сайте SDK может помочь решить эту проблему. Например, Dynamsoft Camera SDK уже решил эту проблему здесь

Посмотрите в трекер проблем библиотек для этой проблемы. Например, в библиотеке Android-Permission закрыт с точно таким же журналом.

Если ваш проект реагирует на нативные, здесь идет длинное обсуждение here

Предложение: я хочу добавить еще несколько строк с предложением @Martin Zeitler об использовании Crashlytics.

Я рекомендую вам настроить ваш сбой в Firebase Crashlytics Отчеты. Потому что иногда одного лишь следа стека недостаточно для воспроизведения авария.

С помощью функции настройки вы сможете получить,

События, которые были выполнены до аварии

Что, безусловно, поможет вам восстановить аварию и исправить ее.

Ответ 3

Введение

Для людей, говорящих:

Есть ли у У вас дополнительный журнал причин? Это очень помогло бы.

Это ваш журнал сбоев:

Сравните с этим журналом сбоев (идентичные номера строк и поток кода):

Эта строка отличается:

с журналом дополнительной причины:

ПРИМЕЧАНИЕ в android.support.v4.app строках.

Исправления

Пакеты классов android.support или суффикс * Compat

(1) AndroidX

(Я) Эта проблема имеет множество причин из моего поиска в Интернете. Распространенной причиной, по-видимому, является использование android.support class packages или наличие *Compat suffix . Просмотрите свои файлы build.gradle для android.support.v4 и т.д.

(ii) Поскольку иногда это не происходит при тестировании, я полагаю, что только при развертывании android.support.v4 и т.д. используется проблемная библиотека устройств на некоторых устройствах или API.

Примечание: с выпуском Android 9.0 (API level 28) появился новый версия библиотеки поддержки под названием AndroidX, которая является частью Jetpack. Библиотека AndroidX содержит существующую библиотеку поддержки а также включает в себя последние компоненты Jetpack .

Вы можете продолжать использовать библиотеку поддержки. Исторические артефакты (версии 27 и более ранние, и упакованные как android.support.* ) останется доступным на Google Maven . Тем не менее, все новые библиотеки разработка будет происходить в библиотеке AndroidX .

Мы рекомендуем использовать библиотеки AndroidX во всех новых проектах. Вы Также следует рассмотреть возможность переноса существующих проектов в AndroidX . Настройка библиотеки поддержки

Библиотеки поддержки теперь доступны через Google Maven репозиторий. Мы больше не поддерживаем загрузку библиотек через SDK Manager , и эта функциональность скоро будет удалена..

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

Примечание: если вы включаете несколько библиотек поддержки, минимальный SDK версия должна быть самой высокой версией, требуемой любым из указанных библиотеки. Например, если ваше приложение включает в себя v14 Preference Библиотека поддержки и библиотека v17 Leanback , ваша минимальная версия SDK должно быть 17 или выше.

(2) реагировать на родные экраны

Это связано с реагировать на родные экраны, и у них есть обходной путь для пожалуйста, посмотрите на эту проблему:

Ответ 4

Я получаю ту же ошибку. Я решил это, может быть, это помогает некоторым людям:

Источник

Оцените статью