[Android] niesamowicie powolne pobieranie HttpsURLConnection


(Kamiljano) #1

Pracuję nad aplikacją, która m.in. będzie w stanie pobierać z internetu jakąś stronkę przy pomocy HttpsUrlConnection. Problem polega na tym, że to jej pobranie zajmuje kosmiczne ilości czasu...

Metoda, wywoływana przez konstruktor:

protected void setPage(String host,String login,String password,boolean change) throws Exception

	{

		if (change)

		{

			this.host=host;

			this.login=login;

			this.password=password;

			Authenticator.setDefault(new NagiosAuthenticator(login,password));

		}

		System.setProperty("http.keepAlive", "false");

		SSLContext sc = SSLContext.getInstance("TLS");

	    sc.init(null, trustAllCerts, new java.security.SecureRandom());

	    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

	    String httpsURL = host;

	    URL myurl = new URL(httpsURL);

	    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();

	    con.setConnectTimeout(3000);

	    con.setRequestProperty("Connection","Keep-Alive");

	    con.setUseCaches(false);

	    ins = con.getInputStream();

	    isr = new InputStreamReader(ins);

	    in= new BufferedReader(isr);

	}

i metoda do samego pobrania stronki

public String getPageContent()

	{

		String inputLine,full="";

		try

		{

		    while ((inputLine = in.readLine()) != null)

		    {

		      full+=inputLine;

		    }

		}

		catch (IOException e)

		{

			return null;

		}

	    return full;

	}

Gdy pobieram zwykłą stronę, która ma około 2000 linii w kodzie html, trwa to pod Androidem prawie 20 minut, podczas gdy jeśli to odpalę normalnie na kompie, trwa to ze 2 sekundy... oczywiście dodałem wszystkie zezwolenia w manifeście i tak dalej. Na czym więc może polegać problem? -- Dodane 02.09.2011 (Pt) 17:55 -- wynalazłem na internecie, że można to trochę przyspieszyć na zasadzie następującej

int ln=con.getContentLength();

char[] arr=new char[ln];

isr.read(arr, 0, arr.length-1);

problem jednak jest taki, że linia

char[] arr=new char[ln];

gdzie ln jest równe pewnie koło 10 000 wywala błąd :confused: