2

私はたくさんグーグルします、しかし今私は尋ねることに決めました。

私のアクティビティは、AsyncTaskを使用してインターネットから画像をダウンロードするという単純なことを1つだけ実行します。

しかし、解決方法がわからないという問題がたくさんあります。

1.] AsyncTaskが画像をダウンロードした後、ユーザーが画面を回転します。この画面の回転をどのように処理すればよいですか?アクティビティの再作成後に使用できるように画像を一時的に保存する場所はどこですか?

画面の向きをロックしたり(android:screenOrientation = "landscape")、自分で処理したりしたくない(android:configChanges = "orientation")。

写真をどこかに保存したいだけです。

onRetainNonConfigurationInstance()getLastNonConfigurationInstance( )を使用して実行できることはわかっていますが、現在は両方とも非推奨になっています。バンドルは文字列(シリアル化可能)データ用に作成されているため、画像には適していません。画像をデータベースやどこかに保存することはできますが、不要です。どこかでローダーでできると読んだのですが、どうしたらいいのかわかりません。出来ますか?

2.] AsyncTaskが画像をダウンロードしている間、ユーザーは画面を回転させます。

AsyncTaskにダウンロードを続行してほしい。ダウンロードが完了すると、AsyncTaskはonPostExecuteメソッドの新しい(再作成された)アクティビティに画像を保存する必要があります。

AsyncTaskがアクティビティの内部クラスである場合、それは機能すると思います。ただし、内部クラスにしたくない場合は、アクティビティへの参照を、たとえば変数に保存する必要があります。しかし、AsyncTaskのコンストラクターのパラメーターとしてActivityへの参照を送信し、Activityが画面の回転後に再作成された場合、AsyncTaskの変数は元のアクティビティを参照するため、新しいアクティビティはダウンロードされた画像を認識せず、ダウンロードを再開する必要があります..

または、AsyncTaskは画像をダウンロードするのに悪い選択ですか?他のものを使うべきですか?サービス?

だから..これらの問題を解決する方法は?多くのアプリ開発者もこれを解決しなければならないと確信しています。しかし、私にとってはすべてギリシャ語です:(

4

2 に答える 2

1

AsyncTask が画像のダウンロードを完了したら、アプリケーションのキャッシュ ディレクトリに保存します。Activity クラスのプロパティで、保存された画像へのパスを保持します。その後、アクティビティのメソッドをオーバーライドしてonSaveInstanceState、向きの変更中にキャッシュされた画像パスをそれ自体に渡すことができます。onCreateメソッドsavedInstanceStateで、保存された画像パスのバンドルを確認します。そのパスが存在する場合は、イメージを再ダウンロードしないでください。代わりに、ディスクからイメージをロードするだけです。

于 2012-07-09T21:34:18.833 に答える
0

すでにどこかで答えています。とてもいい例を見つけました:これを読んでください。これは古い API の例です。

new の場合setRetainInstance、フラグメントのメソッドを使用できます (フラグメントを使用する場合)。

于 2012-07-09T21:17:25.277 に答える