Приложение внезапно завершило работу, но только не у меня

Ответить
Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Приложение внезапно завершило работу, но только не у меня

Сообщение IlyaZh » 20 июл 2012, 11:13

Здравствуйте. Столкнулся со следующей проблемой. Сделал приложение - отправляю его друзьям, у которых версия андройда выше моей. У них приложение вылетает с ошибкой, а у меня почему-то работает. Как такое возможно?? Я вот даже не знаю в чём причина ошибки - у меня ведь всё норм, даже не отладить не как..

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение rezak90 » 20 июл 2012, 11:55

больше бы инфы для начала (что за приложение, какие версии дроида и т.д.)
и почему нельзя отладить? на эмуляторе вроде как можно эмулировать любую версию =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 20 июл 2012, 12:18

Почему бы не взять одно из устройств друзей и попытаться отладить свое приложение на нем?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение IlyaZh » 20 июл 2012, 12:55

Разобрался с проблемой. Отладить на устройствах друзей не могу, т.к. они живут за 100км, а из тех что рядом - андройдов нет.
Оказалось, что не хватало прав в манифесте. Но почему тогда у меня работало?? Чудеса.. :)

Чёрт, а в эмуляторе закрвыается... Приложение работает на yandex map kit. Первый экран - заставка запускается, а тот, что отвечает за карту - сразу выкидывает ошибку.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение Mikhail_dev » 20 июл 2012, 14:08

Андроид не гарантирует как оказалось полную обратную совместимость. Там не работают принципы Java "написано однажды-работает везде". Тому пример тот факт, что на версии <3 , можно в главном потоке UI делать подключение к интернету. а в версии >3 , правила изменились и такое уже сделать будет невозможно. Будет вылетать ошибка

Код: Выделить всё

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
at java.net.InetAddress.getAllByName(InetAddress.java:249)
Было еще что-то, не вспомню. Но такой момент не один в своём роде.

Могу дать совет в отлове непредвиденных ошибок. Создаём класс, расширяющий Thread.UncaughtExceptionHandler

Код: Выделить всё

import java.io.File;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.location.LocationManager;
import android.util.Log;
import android.widget.Toast;

public class CustomExceptionHandler implements Thread.UncaughtExceptionHandler {
    Thread.UncaughtExceptionHandler oldHandler;
    private LocationManager locationManager;
    private final int TIME_OUT_SEC = 10;
    private File fileName=null;

    public CustomExceptionHandler() {
        oldHandler = Thread.getDefaultUncaughtExceptionHandler();
    }

    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        StackTraceElement[] result = throwable.getStackTrace();
        String s="";
        java.lang.StringBuilder sb = new StringBuilder();
        sb.append("<Exception information="+throwable.getMessage()+" >");
        sb.append("Exception line=");
        for (int i = 0; i < result.length; i++) {
            sb.append(result[i]+" ");
        }
        // тут sb записываем в файл, который потом и просим у друзей, в котором будет 
        // стектрейс ошибок
        if(oldHandler != null) // если есть ранее установленный...
            oldHandler.uncaughtException(thread, throwable); // ...вызовем его
    }
}
далее в активности ли в другом необходимом месте вызываем

Код: Выделить всё

Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler());
Такое дело нужно делать в каждом потоке, где надо отлавливать ошибки.

А так вообще тести в эмуляторе, получай ошибки и гугли на stackoverflow

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 20 июл 2012, 15:47

no-- писал(а):... на версии <3 , можно в главном потоке UI делать подключение к интернету. а в версии >3 , правила изменились и такое уже сделать будет невозможно. Будет вылетать ошибка
И правильно сделали. UI поток не место для подобного. Жаль не сразу догадались.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение Mikhail_dev » 21 июл 2012, 14:50

Нет, они это сделали не правильно. По той лишь причине что нужно держаться обратной совместимости. Можно сделать метод как Deprecated, и пусть народу уже сам думает и читает и принимает решение.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение andev » 22 июл 2012, 17:09

Существует мнение, что все, что ниже 4 было вообще как бы сумбурно и разрозненно, а с 4 вышло из стадии экспериментов и встало на путь размеренного развития с выкатом новой глобальной версии ~1 раз в год.
Сам, кстати, наткнулся на данный момент с невозможностью запустить свою отладочную утилитку на 4-й оси с каким-то странным исключением, которое после поиска оказалось как раз было введено в 4 версии что бы не позволять запускать "тяжелый" сетевой код в UI потоке

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 22 июл 2012, 20:16

no-- писал(а):Нет, они это сделали не правильно. По той лишь причине что нужно держаться обратной совместимости. Можно сделать метод как Deprecated, и пусть народу уже сам думает и читает и принимает решение.
Я и говорю, жаль не сразу догадались. Если бы запрет был в самом начале, никто не жаловался.
А если вдуматься, мера вынужденная. Гуглу нужно доказать, что Андроид на самом деле не такой уж и тормозной. Если отметить метод как Deprecated многие могу просто проигнорировать это предупреждение.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение Mikhail_dev » 23 июл 2012, 12:17

А вы часто игнорируете методы, отмеченные как deprecated? Лично я таких людей не знаю.
На счет что они это делали тестировали до 4 версии... Ну не знаю, 4 года шоль понадобилось на тестирование. Многовато. Ладно, это всё не столь важно. Просто написал чтобы знали кто не знал что бывают такие нюансы =)

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение AndreyI » 23 июл 2012, 12:33

Тут еще и производители андроид устройств тоже иной раз плюют на обратную совместимость. В частности после обновления оси до ICS на Samsung Galaxy S2 "отвалились" приложения использующие запись звонков с линии, хотя на старых версиях Android все шло на ура. Причем многие из этих приложений платные и без этого функционала они становятся бессмысленными, какого было пользователям и производителям такого ПО?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 23 июл 2012, 12:58

no-- писал(а):А вы часто игнорируете методы, отмеченные как deprecated? Лично я таких людей не знаю.
Например, методы onCreateDialog и onPrepareDialog класса Activity являются Deprecated методами. Как много людей используют их?

PS: Отсутствие поддержки записи тоже не баг а фитча :) Там какие то проблемы с законодательством.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение Mikhail_dev » 23 июл 2012, 13:12

Честно говоря ни разу ими не пользовался =) Правда я пока молод в плане с андроидом. Но разве AlertDialog это не то, что это дело заменяет? Или это вообще разные вещи?

Аватара пользователя
IlyaZh
Сообщения: 32
Зарегистрирован: 14 июл 2012, 09:52
Откуда: Санкт-Петербург
Контактная информация:

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение IlyaZh » 23 июл 2012, 13:16

KamiSempai писал(а):Например, методы onCreateDialog и onPrepareDialog класса Activity являются Deprecated методами. Как много людей используют их?
А какие методы рекомендуется использовать вместо них? Или вообще о них позабыть?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение AndreyI » 23 июл 2012, 13:24

KamiSempai писал(а): PS: Отсутствие поддержки записи тоже не баг а фитча :) Там какие то проблемы с законодательством.
Да нет там никаких проблем, или эти проблемы надуманы. Во всяком случае официальных объяснений со стороны Samsung по этому поводу я не видел. То, что в некоторых странах запись запрещена это не повод чтобы отключать такую возможность на всех аппаратах, можно было, скажем, сделать это как-то опцией в настройках, при включении выдавать предупреждение о возможном нарушении законов.
Производители кухонных ножей, бейсбольных бит, утюгов, паяльников и т.п. не несут же никакой ответственности, если их изделия использовались для преступных действий. :)

ЗЫ С таким успехом можно было вообще всякую голосовую и видеозапись убрать, ведь телефон можно использовать для подслушивания и подглядывания, а это будет, типа, вторжение в частную жизнь, что в некоторых странах запрещено ;)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 23 июл 2012, 14:04

IlyaZh писал(а):А какие методы рекомендуется использовать вместо них? Или вообще о них позабыть?
Гугл рекомендует использовать DialogFragment. Он есть в android.support.v4.app.
AndreyI писал(а):ЗЫ С таким успехом можно было вообще всякую голосовую и видеозапись убрать, ведь телефон можно использовать для подслушивания и подглядывания, а это будет, типа, вторжение в частную жизнь, что в некоторых странах запрещено ;)
Чую, скоро к этому и придем.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение Mikhail_dev » 23 июл 2012, 14:05

В принципе, наверное и с ними можно. Вот наверное только в этом загвоздка
For SDK version < 8, if you return null in onCreateDialog you get Exception java.lang.IllegalArgumentException.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приложение внезапно завершило работу, но только не у мен

Сообщение KamiSempai » 23 июл 2012, 14:07

no-- писал(а):Честно говоря ни разу ими не пользовался =) Правда я пока молод в плане с андроидом. Но разве AlertDialog это не то, что это дело заменяет? Или это вообще разные вещи?
Думаю после этого станет понятно, что к чему: http://startandroid.ru/uroki/vse-uroki- ... ttons.html
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить