問題タブ [asynctaskloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
5342 参照

android - Android-スレッドプール戦略とローダーを使用して実装できますか?

最初の問題:

  • FragmentLists カスタマイズされた内で複数を使用するアプリケーションに取り組んでいますFragmentStatePagerAdapter。そのようなフラグメントの潜在的にかなりの数が20から40の間である可能性があります。
  • 各フラグメントは、各アイテムにテキストまたは画像を含めることができるリストです。
  • 画像はWebから非同期でアップロードし、一時メモリキャッシュにキャッシュする必要があります。また、利用可能な場合はSDにもキャッシュする必要があります。
  • フラグメントが画面から消えたら、アップロードと現在のアクティビティをキャンセルする必要があります(一時停止ではありません)

私の最初の実装は、Googleのよく知られたイメージローダーコードに従いました。そのコードに関する私の問題は、基本的にAsyncTask画像ごとに1つのインスタンスを作成することです。私の場合、これはアプリを本当に速く殺します。

私はv4互換性パッケージを使用しているので、拡張するカスタムローダーを使用AsyncTaskLoaderすると、スレッドプールが内部的に実装されるため、役立つと思いました。ただし、このコードを複数回実行すると、次の呼び出しごとに前の呼び出しが中断されます。私のListView#getView方法でこれを持っているとしましょう:

このメソッドは、表示される各リストアイテムのループで実行されます。そして、私が述べたように、次の各呼び出しは前の呼び出しを終了します。または、少なくともそれはLogCatに基づいて起こることです

それから、各ローダーに一意のIDを与えることで問題が解決するかもしれないと思いましたが、違いはないようです。その結果、私は一見ランダムな画像になってしまい、アプリは必要なものの1/4でもロードされません。

質問

  • 私がやりたいことをするためにローダーを修正する方法は何でしょうか(そして方法はありますか?)
  • そうでない場合、プールを作成するための良い方法は何AsyncTaskですか?おそらくそれの実装が機能していますか?

コードのアイデアを与えるために、実際のダウンロード/保存ロジックが別のImageManagerクラスにあるローダーの簡略版をここに示します。

0 投票する
7 に答える
10788 参照

android - AsyncTaskLoader が実行されない

互換性パッケージを使用してプロジェクトに AsyncTaskLoader を実装したいので、Android ドキュメントのローダー マニュアルに従いました。

問題は、ローダーが何もしないことです。loadInBackground()呼び出されないようです

私のコードで何が問題なのか分かりますか? (ExpandableListFragment拡張Fragmentしますが、重要なメソッドをオーバーライドしません)

ありがとうございました :-)

/**編集:

AsyncTaskLoader は抽象クラスなので、サブクラス化する必要があることに気付きました (遅れて、私はばかです)。

0 投票する
3 に答える
1947 参照

android - アクティビティまたはフラグメントには、実行されるデータベース操作のタイプごとに個別のローダーが必要ですか?

フラグメントまたはアクティビティがsqliteデータベースと対話するためのGoogle推奨の方法(Androidサポートライブラリを使用)は、AsyncTaskLoaderを拡張するローダーを介して行われ、CursorLoaderがContentProviderに対して行う方法と同様に機能するようです。

単一のアクティビティまたはフラグメントは、1つ以上のテーブルのデータを更新、削除、およびクエリするなど、さまざまな方法でデータベースと対話できます。しかし、ローダーにはデータベース操作を実行する場所が1つしかないため(つまり、でloadInBackground())、開発者は、対話のタイプごとに個別のローダーを作成する必要があります。特に、での動作をパラメーター化する唯一の方法loadInBackground()は、? へのargs引数を介したローダーのコンストラクターへの引数LoaderManager.initLoader()

どうもありがとう。

0 投票する
0 に答える
1290 参照

android - LoaderManagerがすべてのAsyncTaskLoaderのロードを完了したかどうかを確認することは可能ですか?

私が尋ねる理由は、メインのアクティビティによって開始されたAsyncTaskの実行中に、ActionBarにProgressDialogスロバーを表示したいからです。

私の現在のソリューション(それは半ば機能します)はAsyncTaskLoaderを拡張します。そのクラスでは、onForceLoad()メソッドをオーバーライドし、ローダーのIDとクラス名をアプリケーションで管理されているマップ(ローダーIDでキー設定)に追加します。ローダーがマップに追加されると、アクションバーに読み込み中のスロバーが表示されます。LoaderCallbackのonLoadFinishedが呼び出されるたびに、IDを使用してマップからローダーを削除し、マップが空かどうかを確認します。マップが空の場合、私はロードスロバーの表示を停止します。

私が直面している問題は、たとえば、5つのローダーが実行されていて、ユーザーが[更新]をクリックして5つのローダーすべてが再起動した場合、すべてのローダーのonLoadFinishedが呼び出されないことです。マップが空になることはないため、読み込み中のスロバーが無期限に表示されます。これはローダーのスロットル方法と関係があると思いますが、よくわかりません。

0 投票する
6 に答える
10209 参照

android - AsyncTaskLoaderからプログレスバーを更新しますか?

AsyncTaskLoaderを使用する場合、更新中のステータスを示すプログレスバーをどのように更新しますか?通常、完了したらコールバックが削除されるのを待ちますが、更新を実行するにはどうすればよいですか?メインスレッド(ui)に、設定中のデータなどをポーリングさせますか?

編集:私はAsyncTaskLoaderについて話している、ローダーの部分を見てください。クラスへのリンクは次のとおりです:http://developer.android.com/reference/android/content/AsyncTaskLoader.html

将来的に使用したいのですが:)、AsyncTaskでこれを行う方法を知っています。

0 投票する
3 に答える
754 参照

android - AsyncTaskLoaderの使用中にエラーが発生しました

これは私のFragmentListArraySupport.javaです

これは私のローダーです:

私のマニフェストはこれです:

エラー:

エラーは何でしょうか?

これは、私がフラグメントを処理し、ドキュメントや例があまりないAsyncTaskLoadersを使用している最速の時間です。私のコードが実行する、または実行する必要があるのは、文字列のリストを出力することだけです。私は彼らがそれを改善することができます。

私のコードに何か問題がありますか?どこ?

0 投票する
1 に答える
2604 参照

android - AsyncTaskLoader を使用したフラグメントは、他のフラグメントのアクティビティへのアタッチに影響を与えます

AsyncTaskLoader を使用して、データベース クエリからカーソルをロードしました。私は Android 開発者のサンプルに従いました: http://developer.android.com/reference/android/content/AsyncTaskLoader.html

しかし、どういうわけか、このフラグメント (ローダーを使用する) の後にページ アダプターに追加されるフラグメントは、アクティビティにアタッチされず、アクティビティを必要とするメソッド (getString() など) を使用しようとすると、例外がスローされます。このフラグメントはどのアクティビティにも関連付けられていません。

ここにいくつかのコードがあります:

  1. ページ アダプターにフラグメントを追加します。

    /li>
  2. AsyncTaskLoader の実装:

    抽象公開クラス AbstractCursorLoader extends AsyncTaskLoader {

    /li>
  3. ローダーの初期化:

    }

    /li>

なぜそれが起こっているのか、私には本当に手がかりがありません。

PSコメントでコードブロックを作成する際に問題が発生しました。バグがあると思います。申し訳ありません。

前もってありがとう、エラド。

0 投票する
1 に答える
1505 参照

android - SQLiteDatabase接続はAsyncTaskLoader内でどのように処理する必要がありますか?

AsyncTaskLoaderでSQLiteDatabase接続をどこでいつ開く必要があるのか​​疑問に思っています。ローダーのライフサイクルを完全に理解しているとは思えないので、これを正しく行わないと、メモリリーク/NullPointerExceptionsが発生する可能性があります。現在、ローダーのコンストラクターでSQLiteDatabaseを開いています。

しかし、どこで接続を再度閉じるのですか?

0 投票する
5 に答える
6337 参照

android - AsyncTaskLoaderからUIを更新します

私は自分AsyncTaskをに変換しましたAsyncTaskLoader(主に構成の変更に対処するため)。TextView進行状況として使用していてonProgressUpdateAsyncTaskを更新するために使用していました。AsyncTaskLoader同等のものがあるようには見えないので、 loadInBackground(でAsyncTaskLoader)私はこれを使用しています:

私はこれをで使用しているFragmentので、を使用していgetActivity()ます。これは、画面の向きを変更するなどの構成変更が発生した場合を除いて、非常にうまく機能します。私AsyncTaskLoaderは走り続けます(それが私がを使用している理由ですAsyncTaskLoader)が、runOnUiThreadスキップされるようです。

なぜスキップされているのか、またはこれがからUIを更新するための最良の方法であるかどうかはわかりません AsyncTaskLoader

アップデート:

AsyncTaskUIの更新に適していると思われるため、最終的にはに戻りました。AsyncTaskで機能するものをとマージできることを望みAsyncTaskLoaderます。