我正在开发需要html解析的应用程序。所以,我目前使用jsoup在AsyncTaskLoader像这样(例如):使用多线程解析Android 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 2014-08-31 19:58:23
@enVGuy - 您提出这些问题的事实表明需要了解更多关于编写多线程代码,编制线程之间的数据,锁等的基础知识和基础知识......我建议您阅读以下书籍:[本书] (http://amzn.com/1449364136)和[this one](http://amzn.com/0201310090)。 – selbie 2014-08-31 20:47:26