私は初心者プログラマーであるため、いくつかの改訂を行っています-現在、AsyncTaskを理解しようとしています。Webページのコンテンツをダウンロードして表示するために使用されるこの例がありますが、どのビットが何をするのか頭を悩ませています。私のメモは残念ながらゴミです。誰かがそれを説明するのを手伝ってくれますか?
5 に答える
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
// since this is the background thread, we need to return the string reponse so that onPostExecute can update the textview.
return response
}
@Override
protected void onPostExecute(String result) {
// only onPostExecute,onProgressUpdate(Progress...), and onPreExecute can touch modify UI items since this is the UI thread.
textView.setText(result);
}
textView.setText(response); のように、doInBackground 内のビューに触れることはできません。それは間違っています。onPreExecute と onPostExecute でビューに触れる必要があり、doInBackground では UI スレッドをロックしないでください。さらに、onPre と onPost は UI スレッドをロックします。
AsyncTaskこのリンク、AsyncTask のドキュメントを参照してください。
したがって、どの部分が最も不明確であるかはよくわかりませんが、基本を説明させてください。
コードでプライベート Async-Task を作成します。このクラスのメソッドは、アプリが正常に実行されている間、バックグラウンドで実行できます (そうしないと、フリーズします)。doInBackground() メソッドで宣言されているものはすべてバックグラウンドで実行されます。
実行を開始するには、もちろんプライベート Async-Task の外部にある execute() メソッドを呼び出します。execute() メソッドを呼び出す前に、Async-Task をインスタンス化します。
onPostExecute() のメソッドを使用して、たとえば結果を処理したり、値を返したりできます。このメソッドは、doInBackground() が終了したときに呼び出されます。