我正在開發需要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