Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
#1

The application may be doing too much work on its main thread - Android

24.12.2015, 16:50. Просмотров 934. Ответов 23
Метки нет (Все метки)

Ну елки палки, это что еще такое ?
В приложении запускаю камеру и ловлю результат
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
PhotoObject current_photoObj ; // мой класс для работы с файлом фотки
current_photoObj = new PhotoObject();
 
  protected void camera_start(){
        Intent takePictureIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        takePictureIntent.putExtra( MediaStore.EXTRA_OUTPUT, current_photoObj.getFileForCameraIntent() );
        startActivityForResult(takePictureIntent, CAMERA_RESULT);
    }
 
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_RESULT) {
 
            if (resultCode == RESULT_OK) {
 
                if( current_photoObj.resize() ){
 
                    Toast toast = Toast.makeText(getApplicationContext(),"Фотография прикреплена", Toast.LENGTH_SHORT);
                    toast.show();
 
                }else{
 
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Не удалось преобразовать изображение", Toast.LENGTH_SHORT);
                    toast.show();
 
                    current_photoObj.delete();
                    current_photoObj = null;
 
                }
            }else{
                current_photoObj.delete();
                current_photoObj = null;
            }
        }
    }
И далее...
The application may be doing too much work on its main thread
Что-то типо "Skipped 40+ frames", не успел копирнуть

12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: FATAL EXCEPTION: main
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: Process: com.example.pr, PID: 14752
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.pr/com.example.pr.EvacuationAddActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.pr.data.PhotoObject.resize()' on a null object reference
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3680)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3723)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:156)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Looper.loop(Looper.java:211)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5389)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.pr.data.PhotoObject.resize()' on a null object reference
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.example.pr.EvacuationAddActivity.onActivityResult(EvacuationAddActivity.java:338)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.Activity.dispatchActivityResult(Activity.java:6192)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3676)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3723)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:156)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Looper.loop(Looper.java:211)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5389)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)*
Возможно тут описана похожая проблема, но в eng я слабоват для такого.
Проблема возникает редко, в большинстве случаев все работает.
Подскажите плиз из-за чего возникает проблема и как ее исправить ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
24.12.2015, 17:21     The application may be doing too much work on its main thread #2
Цитата Сообщение от gradus Посмотреть сообщение
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.pr/com.example.pr.EvacuationAddActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.pr.data.PhotoObject.resize()' on a null object reference
У Вас NullPointerExeption
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
24.12.2015, 19:08  [ТС]     The application may be doing too much work on its main thread #3
YuraAAA, спасибо за диагноз но из-за чего это происходит ?
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
25.12.2015, 08:04     The application may be doing too much work on its main thread #4
строка
current_photoObj = new PhotoObject();
выполняется?
в каком она методе
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 10:04  [ТС]     The application may be doing too much work on its main thread #5
Valakin, она по любому должна выполняться.
В методе активити
Java
1
protected void onCreate(Bundle savedInstanceState)
стоит перехват события нажатия на кнопку, где происходит запуск камеры. Перед методом запуска камеры срабатывает эта самая строка
Java
1
current_photoObj = new PhotoObject();
Если бы не сработала, то ошибка бы произошла при вызове интента камеры, т.к. вызываю метод getFileForCameraIntent() объекта current_photoObj
Java
1
takePictureIntent.putExtra( MediaStore.EXTRA_OUTPUT, current_photoObj.getFileForCameraIntent() );
Добавлено через 7 минут
да, забыл. Перед крашем в лог писалось "Shutting down VM"
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
25.12.2015, 11:22     The application may be doing too much work on its main thread #6
Цитата Сообщение от gradus Посмотреть сообщение
current_photoObj.resize()
тут null видимо
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
25.12.2015, 11:28     The application may be doing too much work on its main thread #7
Цитата Сообщение от gradus Посмотреть сообщение
on a null object reference
разве от не про объект пишет
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
25.12.2015, 11:30     The application may be doing too much work on its main thread #8
Valakin, про объект. Попытка вызвать метод resize у объекта null.
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 12:47  [ТС]     The application may be doing too much work on its main thread #9
YuraAAA, только вот как это может произойти ?
Может ли это повлиять на то что объявление
Java
1
PhotoObject current_photoObj ;
а не
Java
1
public PhotoObject current_photoObj ;
Возможно ли что при использование камеры, в это время в активити очищаются переменные сборщиком ?
И еще в манифете для этой активити у меня прописано android:screenOrientation="portrait", может это как-то еще повлияло ?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
25.12.2015, 13:49     The application may be doing too much work on its main thread #10
gradus, ну так поставьте маяк и посмотрите current_photoObj у вас null или нет...
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 14:02  [ТС]     The application may be doing too much work on its main thread #11
Armagedo, так это происходит очень редко. Если бы я знал как поймать этот случай...
Более 100 фоток понаделал, из них раза 2-3 такое происходило.
Да и так понятно, что null. И условие влепил, но вот все же почему становиться null...
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
25.12.2015, 14:17     The application may be doing too much work on its main thread #12
gradus, ну видимо бывает такое, что результат приходит не RESULT_OK, а там у вас current_photoObj = null; и следующее фото уже вызывает NPE. Зачем вообще при ошибке все чистить?
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
25.12.2015, 15:16     The application may be doing too much work on its main thread #13
gradus, Spelcrawler правильно сказал. Создавайте photoObject в camera_start методе как вариант
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 15:28  [ТС]     The application may be doing too much work on its main thread #14
Spelcrawler, так если не RESULT_OK, то камера по идеи должна закрыться или может быть, что вызвался метод onActivityResult и камера продолжает работать ?
current_photoObj = null; сбрасываю для очистки и правильности содержания свойств в зависимости от событий, зачем держать там объект если не будет использоваться, отдам лучше память мусорщику

Добавлено через 3 минуты
YuraAAA, по нажатию на кнопку, у меня вызывается метод camera_used();
Java
1
2
3
4
5
6
protected void camera_used(){
      if(photos.size() < max_photo_count){
            current_photoObj = new PhotoObject();
            camera_start();
       }
    }
Разве так не правильно ?
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
25.12.2015, 16:35     The application may be doing too much work on its main thread #15
Цитата Сообщение от gradus Посмотреть сообщение
камера по идеи должна закрыться или может быть, что вызвался метод onActivityResult и камера продолжает работать ?
Из того кода что есть это не понятно.
Цитата Сообщение от gradus Посмотреть сообщение
Более 100 фоток понаделал, из них раза 2-3 такое происходило.
После этого сообщения подумал, что фотки делаются все на одном экране подряд.
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 16:48  [ТС]     The application may be doing too much work on its main thread #16
Spelcrawler,
После этого сообщения подумал, что фотки делаются все на одном экране подряд.
Нет, это в общем сколько я тестировал приложения и сделал фоток
Алгоритм таков:
1) при нажатии кнопки вызывается метод camera_used(), в этом методе условие , что если фоток меньше максимального количества (до 3), то заполняем объект current_photoObj и вызываем метод camera_start()
2) в методе camera_start() вызываем интент камеры и передаем параметр в виде адреса файла, который берется из current_photoObj.getFileForCameraIntent()
3) перехватываю событие из onActivityResult и если resultCode == RESULT_OK , то запускаю заново camera_used() (п.1)

могу попозже код скинуть, но уверяю вас что в нем ошибок нет
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
25.12.2015, 20:56     The application may be doing too much work on its main thread #17
надо было с самого начала весь код показывать
вагную что ошибка ловится если запустить камеру и не делая никаких фото просто закрыть приложение камеры
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
26.12.2015, 10:48  [ТС]     The application may be doing too much work on its main thread #18
Паблито, нет, если посмотрите код в первом посте то стоит проверка на результ от камеры.
На заголовок темы уже никто наверное внимание не обращает.
Я все учел и повторюсь что в коде ошибок точно нет, не ищите какие-то детские оплошности
Проблема возникает очееень редко, а не из-за закрытии/открытии камеры/приложения и т.п. и т.д.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
26.12.2015, 11:24     The application may be doing too much work on its main thread #19
Цитата Сообщение от gradus Посмотреть сообщение
На заголовок темы уже никто наверное внимание не обращает.
Потому что она не имеет значения и/или отношения к заданному вопросу.
Более того, простой гуглёж в самой первой ссылке дал бы вам следующее

When this message pops up on android emulator and the number of frames skipped are fairly small (<100) then you can take a safe bet of the emulator being slow – which happens almost all the times. But if the number of frames skipped and large and in the order of 300+ then there can be some serious trouble with your code.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2015, 11:36     The application may be doing too much work on its main thread
Еще ссылки по теме:

Android FATAL EXCEPTION: pool-1-thread-5
Остановить Thread Android
Thread.sleep() Android
Как передать данные в thread? Android
Передать данные в работающий thread из другого thread Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
26.12.2015, 11:36  [ТС]     The application may be doing too much work on its main thread #20
Armagedo, как это не имеет !? я в первом посте написал что крах приложения происходит из-за этого.
И current_photoObj становиться null только когда появляется это сообщение.
Спасибо за копипаст, но если бы все же прочитали мой первый пост и увидели бы код и ссылку на овервлоф где описана эта проблема и я указал что не особо понимаю о чем идет речь.
Yandex
Объявления
26.12.2015, 11:36     The application may be doing too much work on its main thread
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru