Android: процесс умер - мало ресурсов? - PullRequest
4 голосов
/ 08 декабря 2011

У меня небольшая проблема с простым HTTP-запросом GET, который я написал и который будет запрашивать URL каждые X минут.У меня было раз или два в день, когда процесс останавливался посреди запроса GET.

Вот пример журнала отладки:

12-07 16:29:22.650 V/TAG(11655): Executing HTTP Request
12-07 16:29:25.336 D/dalvikvm(11655): GC_CONCURRENT freed 366K, 50% free 2824K/5639K, external 0K/0K, paused 3ms+3ms
12-07 16:29:25.526 D/dalvikvm(11655): GC_CONCURRENT freed 450K, 52% free 2825K/5767K, external 0K/0K, paused 2ms+2ms
12-07 16:29:29.990 I/ActivityManager( 1339): Process PackageName:remote (pid 11655) has died.
12-07 16:29:29.990 I/ActivityManager( 1339): Low Memory: No more background processes.

Теперь это просто вывело две проблемыдля меня:

  • Во-первых, указанное мной время ожидания не работает:

        HttpParams httpParameters = new BasicHttpParams();
        int timeoutConnection = 10000;
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
        int timeoutSocket = 10000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
        HttpClient client=new DefaultHttpClient(httpParameters);
        HttpGet request=new HttpGet(url);
        Log.v(TAG,"Executing HTTP Request");
        HttpResponse response=client.execute(request);
    
  • Вторая проблема заключается в том, что я не могуувидеть причину, по которой процесс умер - это сообщение «умер» то же самое, если его убивают из-за нехватки памяти?Поскольку время ожидания здесь не достигнуто (client.execute находится в блоке try / catch)

Спасибо за ваши ответы!

1 Ответ

2 голосов
/ 15 декабря 2011

Если я вас правильно понял, вы спрашиваете две вещи:

  • Q1: почему не работает указанное время ожидания?
  • Q2.Почему процесс умирает?

Начиная с Q2, я предполагаю, что ваш процесс убит, потому что тайм-аут не работает, и вашему коду потребовалось слишком много времени для запуска.В результате Android убил его.

Что касается Q1: я провел некоторые эксперименты и заметил, что в эмуляторе тайм-ауты не работают и в моем приложении.Тестирование с помощью эмулятора API7 и API8 Я всегда получаю UnknownHostException примерно через 20 секунд, независимо от установленного времени ожидания.Это касается DefaultHttpClient, а также HttpUrlConnection и AndroidHttpClient.

Поиск в Google показал, что другие люди также сообщали о проблемах с таймаутом:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...