0

以前はアプリをアクティビティだけで動作させていましたが、現在は UI を改善するためにフラグメントへの変換に取り組んでいます。

以前は、Activityを開始し、特定のメソッドが必要なときにAsyncTaskとして使用するためにそれ自体を渡しましContextた (UI 操作ではなく、共有設定とコンテンツ プロバイダーへの呼び出し)。Activityが破棄されてガベージ コレクションが行われた場合、このアプローチが望ましくない結果につながる可能性があることを学びましたが、コンパイルして正常に実行されました。

この変更を開始したのは、アプリが一時停止および停止したときの読み込み画面の動作を改善したかったからです。Android のロード画面に眉をひそめている人がいることに気付きましたが、私には 20 秒ほどかかる操作があり、アプリが機能する前に完了する必要があるため、必要です。

そこで、このガイドを使用して、アプリの改善を開始しました。

要するに、ガイドはをUI が添付AsyncTaskされFragmentていないに移動し、ロード画面を で表示するために別の を使用します。これは、 を生成する Fragment にコンテキストがないことを意味します。つまり、 にコンテキストを渡すことができません。FragmentProgressBarAsyncTaskAsyncTask

前に言ったように、オブジェクトAsyncTaskを必要とする操作が にあるのですが、どこから取得できますか? 開始する前にContext、そのデータを に渡す必要がありますか?AsyncTask

4

2 に答える 2

2

私の知る限り、コンテキストは静的プロパティではないため、実際に取得するには 1 つのオブジェクトが必要です。

したがって、この投稿のように「ハックウェイ」に進むことができます。

Androidで「コンテキスト」を取得する静的な方法は?

または、Android のガイドラインに従い、バックグラウンドの読み込みに Service を使用することもできます。これAsyncTaskは、後で UI と通信する必要があるバックグラウンド操作を支援するために設計されたユーティリティ クラスであるためAsyncTask、UI オブジェクトと関連付けて使用する必要があります。代わりに を使用すると、オブジェクト自体が必要なコンテキストであるServiceため、問題はありません。Service

于 2013-07-18T15:24:21.127 に答える
0

AsyncTask が UI コンポーネントを処理していない場合は、親アクティビティのコンテキストを使用できます。そのため、以前に渡した場所に を渡しthisますgetActivity()。UIを変更している場合、これによりNull Pointer Exceptionsが設定されることに注意してください。

于 2013-07-18T15:27:32.737 に答える