Я разрабатываю приложение, которое требует разбора html. Итак, я в настоящее время использую jsoup в AsyncTaskLoader, как это (пример):Анализ HTML-файлов с помощью многопоточности
@Override
public Boolean loadInBackground() {
try {
Connection.Response response = Jsoup.connect(getContext().getString(R.string.url_login))
.data("id", account_id, "password", account_password)
.timeout(5000)
.method(Connection.Method.POST)
.execute();
String cookie = response.cookie("JSESSIONID");
Document document = Jsoup.connect(getContext().getString(R.string.url_schedule))
.cookie("JSESSIONID", cookie)
.get();
Element table = document.select("table").first();
if (table != null) {
databaseHandler.openDatabase();
databaseHandler.getDatabase().beginTransaction();
try {
for (Element row : table.select("tr")) {
Elements columns = row.select("td");
addItem(columns, DatabaseHandler.getTableName());
}
databaseHandler.getDatabase().setTransactionSuccessful();
} finally {
databaseHandler.getDatabase().endTransaction();
}
databaseHandler.closeDatabase();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Это только одна страница скрип и есть некоторые из них. И я заметил, что скорость его не очень хорошая. Итак, мне сказали, что я должен рассмотреть возможность многопоточности и разобрать все эти страницы в отдельных потоках одновременно, чтобы это было быстрее. Теперь у меня есть несколько вопросов:
- Должен ли я использовать AsyncTaskLoader или AsyncTask, или есть что-то еще (лучше) для этого решения? Я хочу знать, что лучше всего подходит для этой цели.
- Может ли кто-нибудь привести меня к учебникам/примерам, как делать многопоточность в android?
Спасибо;)
Ну, всегда есть 4 страницы, которые нужно разобрать, когда приложение загружается, а еще 2, когда пользователь запрашивает. Таким образом, AsyncTask должен быть как основной фоновый поток, и я должен запускать в нем другие потоки (и если это идея, как я должен указывать на поток AsyncTask, если все страницы были проанализированы, и я могу закрыть эти потоки дочернего фона ?)? Или я должен сделать 6 отдельных задач и выполнить их все отдельно с помощью этого .exectureOnExecutor()? Постскриптум Разве нет людей, которые говорят, что AsyncTask устарел? Или это просто слухи? – env
@enVGuy - Тот факт, что вы задаете эти вопросы, показывает необходимость узнать больше об основах и основах написания многопоточного кода, сортировки данных между потоками, блокировками и т. Д. Я предлагаю следующую книгу: [эта книга] (http://amzn.com/1449364136) и [этот] (http://amzn.com/0201310090). – selbie