インターネットから画像をダウンロードしてビットマップに保存する方法があります。画像をダウンロードしている間、読み込みダイアログが表示されます。メソッドは正常に動作しますが、アプリに機能を追加してスレッドを停止し (ダウンロードを停止し)、ユーザーが電話の戻るキーを押した場合にダイアログを閉じたいと考えています。
public static void getRemoteImage(final String url, final Handler handler) {
Thread thread = new Thread(){
public void run() {
try {
Looper.prepare();
handler.sendEmptyMessage(Util.SHOW_LOADING_DIALOG);
final URL aURL = new URL(url);
final URLConnection conn = aURL.openConnection();
conn.connect();
final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
image = BitmapFactory.decodeStream(bis);
bis.close();
handler.sendEmptyMessage(Util.HIDE_LOADING_DIALOG);
Looper.loop();
}catch (Exception e) {e.printStackTrace();}
}
};
thread.start();
}
ユーザーがアクティビティで戻るキーを押したときにスレッドを停止する機能を追加するにはどうすればよいですか? グーグルで道が分からない
編集:これはOvidiuの回答を使用しようとする私の試みですが、機能しません:(
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialogHandler.sendEmptyMessage(Util.HIDE_DIALOG);
task.cancel(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
private class DownloadTask extends AsyncTask{
@Override
protected void onPreExecute() {
super.onPreExecute();
//INITIALIZATIONS
}
@Override
protected Object doInBackground(Object... params) {
try {
dialogHandler.sendEmptyMessage(Util.SHOW_DIALOG);
final URL aURL = new URL(url);
final URLConnection conn = aURL.openConnection();
conn.connect();
final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
image = BitmapFactory.decodeStream(bis);
bis.close();
dialogHandler.sendEmptyMessage(Util.HIDE_DIALOG);
}catch (Exception e) {e.printStackTrace();}
return null;
}
@Override
protected void onCancelled(){
super.onCancelled();
System.out.println("Task cancelled");
}
}