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