私のアプリにはウィジェットがあります。HttpURLConnection を使用してコンテンツをダウンロードします (15 分ごとに自動ダウンロード)。通常、コンテンツのダウンロードには 10 秒かかります。
問題は、アプリの使用中に、この更新操作がバックグラウンドで進行している間にフリーズ/ハングすることです。ウィジェット クラスの updateAppWidget メソッドから handler.postDelayed を使用しています。バックグラウンド スレッドを使用しているにもかかわらず、アプリが一時的にフリーズします。多分 httpConn.connect(); だと思いました。問題になる可能性があり、DefaultHttpClient を使用しました。それでも同じ凍結効果。
誰かがこの問題についての洞察を提供してもらえますか?
ありがとう...
このハンドラを使用してウィジェット クラスから...
ハンドラー handler = new Handler();
handler.postDelayed(新しい Runnable() {
public void run() {
//download and update widget UI here.....
}
}、1000);
private String download1(String urlString) {
InputStream in = null;
byte[] data = null;
URLConnection conn = null;
try
{
URL url = new URL(urlString);
conn = url.openConnection();
if ((conn instanceof HttpURLConnection))
{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setConnectTimeout(30000);
httpConn.setReadTimeout(30000);
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK)
{
in = httpConn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c;
while((c = in.read()) > -1){
baos.write(c);
}
data = baos.toByteArray();
baos.close();
in.close();
String str = new String(data);
System.out.println(str);
httpConn.disconnect();
((HttpURLConnection) conn).disconnect();
return str;
}
else
{
httpConn.disconnect();
((HttpURLConnection) conn).disconnect();
return("Error: Invalid data");
}
}
}
catch (Exception ex)
{
Log.e("TAG",ex.getMessage().toString());
return("Error: No connection");
}
finally
{
try
{
if (conn != null)
{
conn = null;
}
if (in != null)
{
in.close();
in = null;
}
}catch(IOException ex)
{
return("Error: "+ex.getMessage());
}
}
return null;
}