Итак, у меня есть небольшое приложение, над которым я работаю, которое собирает комиксы из Интернета и отображает их на моем телефоне.Ничего особенного, просто используя его, чтобы выучить веревки.Функция называется comicReload ();выполняет большую часть работы, и он вызывается много раз в приложении (при первом запуске, и когда пользователь нажимает определенные кнопки. Вот функция:
public void comicReload () throws IOException {
//clears some Vectors that have things in them from the last run
imagetitles.clear();
imagetext.clear();
imagelinks.clear();
//forms the link it will connect to, and connects
connector = siteBase + Integer.toString(comicNumber);
doc = Jsoup.connect(connector).get();
media = doc.select("[src]");
//gets the required media from the site
for (Element src : media) {
if (src.tagName().equals("img"));
imagetitles.add(src.attr("alt"));
imagetext.add(src.attr("title"));
imagelinks.add(src.attr("src"));
}
//some variables I could probably get rid of, but it's easy to read
Integer titlesize = imagetitles.size();
Integer textsize = imagetext.size();
Integer linkssize = imagelinks.size();
comicTitle = (imagetitles.get(titlesize-4));
hoverText = (imagetext.get(textsize-4));
comicLink = (imagelinks.get(linkssize-4));
//gets the picture I am looking for along with the associated text
URL url = new URL(comicLink);
InputStream is = (InputStream) url.getContent();
image = Drawable.createFromStream(is, "src name");
//finally puts the scraped information into the layout
comicView.setImageDrawable(image);
title.setText(comicTitle);
htext.setText(hoverText);
}
Он работает на 100% нормально при вызове, но это немного медленнее, чем 3G, поэтому я попытался добавить ProgressDialog, чтобы показать, пока он загружается. Это моя попытка (это код, который запускается там, где я использовал просто comicReload ();)
pd = ProgressDialog.show(this, "Getting Comic", "Loading", true, false);
new Thread(new Runnable() {
public void run() {
try {
comicReload();
} catch (IOException e) {
Log.i("ComicReloadFail","Sam");
}
pd.dismiss();
return;
}
}).start();
Сам поток работает нормально, и когда я помещаю некоторый случайный код для выполнения вместо блока try-catch с помощью comicReload (), в нем все становится просто замечательно. Во-вторых, я помещаю туда comicReload (), однакозапуск приложения приводит к тому, что спиннер ProgressDialog будет вращаться в течение нескольких секунд, прежде чем сила приложения закроется. Что вызывает это? И почему comicReload () перестает работать, когда он находится в потоке. Я просто хочу, чтобы этот метод выполнялся скрутится, пока он работает.
Заранее спасибо, ребята, я знаю, что было много читать.