問題タブ [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.
android - Android-スレッドプール戦略とローダーを使用して実装できますか?
最初の問題:
FragmentLists
カスタマイズされた内で複数を使用するアプリケーションに取り組んでいますFragmentStatePagerAdapter
。そのようなフラグメントの潜在的にかなりの数が20から40の間である可能性があります。- 各フラグメントは、各アイテムにテキストまたは画像を含めることができるリストです。
- 画像はWebから非同期でアップロードし、一時メモリキャッシュにキャッシュする必要があります。また、利用可能な場合はSDにもキャッシュする必要があります。
- フラグメントが画面から消えたら、アップロードと現在のアクティビティをキャンセルする必要があります(一時停止ではありません)
私の最初の実装は、Googleのよく知られたイメージローダーコードに従いました。そのコードに関する私の問題は、基本的にAsyncTask
画像ごとに1つのインスタンスを作成することです。私の場合、これはアプリを本当に速く殺します。
私はv4互換性パッケージを使用しているので、拡張するカスタムローダーを使用AsyncTaskLoader
すると、スレッドプールが内部的に実装されるため、役立つと思いました。ただし、このコードを複数回実行すると、次の呼び出しごとに前の呼び出しが中断されます。私のListView#getView
方法でこれを持っているとしましょう:
このメソッドは、表示される各リストアイテムのループで実行されます。そして、私が述べたように、次の各呼び出しは前の呼び出しを終了します。または、少なくともそれはLogCatに基づいて起こることです
それから、各ローダーに一意のIDを与えることで問題が解決するかもしれないと思いましたが、違いはないようです。その結果、私は一見ランダムな画像になってしまい、アプリは必要なものの1/4でもロードされません。
質問
- 私がやりたいことをするためにローダーを修正する方法は何でしょうか(そして方法はありますか?)
- そうでない場合、プールを作成するための良い方法は何
AsyncTask
ですか?おそらくそれの実装が機能していますか?
コードのアイデアを与えるために、実際のダウンロード/保存ロジックが別のImageManagerクラスにあるローダーの簡略版をここに示します。
android - AsyncTaskLoader が実行されない
互換性パッケージを使用してプロジェクトに AsyncTaskLoader を実装したいので、Android ドキュメントのローダー マニュアルに従いました。
問題は、ローダーが何もしないことです。loadInBackground()
呼び出されないようです
私のコードで何が問題なのか分かりますか? (ExpandableListFragment
拡張Fragment
しますが、重要なメソッドをオーバーライドしません)
ありがとうございました :-)
/**編集:
AsyncTaskLoader は抽象クラスなので、サブクラス化する必要があることに気付きました (遅れて、私はばかです)。
android - アクティビティまたはフラグメントには、実行されるデータベース操作のタイプごとに個別のローダーが必要ですか?
フラグメントまたはアクティビティがsqliteデータベースと対話するためのGoogle推奨の方法(Androidサポートライブラリを使用)は、AsyncTaskLoaderを拡張するローダーを介して行われ、CursorLoaderがContentProviderに対して行う方法と同様に機能するようです。
単一のアクティビティまたはフラグメントは、1つ以上のテーブルのデータを更新、削除、およびクエリするなど、さまざまな方法でデータベースと対話できます。しかし、ローダーにはデータベース操作を実行する場所が1つしかないため(つまり、でloadInBackground()
)、開発者は、対話のタイプごとに個別のローダーを作成する必要があります。特に、での動作をパラメーター化する唯一の方法loadInBackground()
は、? へのargs
引数を介したローダーのコンストラクターへの引数LoaderManager.initLoader()
どうもありがとう。
android - LoaderManagerがすべてのAsyncTaskLoaderのロードを完了したかどうかを確認することは可能ですか?
私が尋ねる理由は、メインのアクティビティによって開始されたAsyncTaskの実行中に、ActionBarにProgressDialogスロバーを表示したいからです。
私の現在のソリューション(それは半ば機能します)はAsyncTaskLoaderを拡張します。そのクラスでは、onForceLoad()メソッドをオーバーライドし、ローダーのIDとクラス名をアプリケーションで管理されているマップ(ローダーIDでキー設定)に追加します。ローダーがマップに追加されると、アクションバーに読み込み中のスロバーが表示されます。LoaderCallbackのonLoadFinishedが呼び出されるたびに、IDを使用してマップからローダーを削除し、マップが空かどうかを確認します。マップが空の場合、私はロードスロバーの表示を停止します。
私が直面している問題は、たとえば、5つのローダーが実行されていて、ユーザーが[更新]をクリックして5つのローダーすべてが再起動した場合、すべてのローダーのonLoadFinishedが呼び出されないことです。マップが空になることはないため、読み込み中のスロバーが無期限に表示されます。これはローダーのスロットル方法と関係があると思いますが、よくわかりません。
android - AsyncTaskLoaderからプログレスバーを更新しますか?
AsyncTaskLoaderを使用する場合、更新中のステータスを示すプログレスバーをどのように更新しますか?通常、完了したらコールバックが削除されるのを待ちますが、更新を実行するにはどうすればよいですか?メインスレッド(ui)に、設定中のデータなどをポーリングさせますか?
編集:私はAsyncTaskLoaderについて話している、ローダーの部分を見てください。クラスへのリンクは次のとおりです:http://developer.android.com/reference/android/content/AsyncTaskLoader.html
将来的に使用したいのですが:)、AsyncTaskでこれを行う方法を知っています。
android - AsyncTaskLoaderの使用中にエラーが発生しました
これは私のFragmentListArraySupport.javaです
これは私のローダーです:
私のマニフェストはこれです:
エラー:
エラーは何でしょうか?
これは、私がフラグメントを処理し、ドキュメントや例があまりないAsyncTaskLoadersを使用している最速の時間です。私のコードが実行する、または実行する必要があるのは、文字列のリストを出力することだけです。私は彼らがそれを改善することができます。
私のコードに何か問題がありますか?どこ?
android - AsyncTaskLoader を使用したフラグメントは、他のフラグメントのアクティビティへのアタッチに影響を与えます
AsyncTaskLoader を使用して、データベース クエリからカーソルをロードしました。私は Android 開発者のサンプルに従いました: http://developer.android.com/reference/android/content/AsyncTaskLoader.html
しかし、どういうわけか、このフラグメント (ローダーを使用する) の後にページ アダプターに追加されるフラグメントは、アクティビティにアタッチされず、アクティビティを必要とするメソッド (getString() など) を使用しようとすると、例外がスローされます。このフラグメントはどのアクティビティにも関連付けられていません。
ここにいくつかのコードがあります:
ページ アダプターにフラグメントを追加します。
/li>AsyncTaskLoader の実装:
抽象公開クラス AbstractCursorLoader extends AsyncTaskLoader {
/li>ローダーの初期化:
}
/li>
なぜそれが起こっているのか、私には本当に手がかりがありません。
PSコメントでコードブロックを作成する際に問題が発生しました。バグがあると思います。申し訳ありません。
前もってありがとう、エラド。
android - SQLiteDatabase接続はAsyncTaskLoader内でどのように処理する必要がありますか?
AsyncTaskLoaderでSQLiteDatabase接続をどこでいつ開く必要があるのか疑問に思っています。ローダーのライフサイクルを完全に理解しているとは思えないので、これを正しく行わないと、メモリリーク/NullPointerExceptionsが発生する可能性があります。現在、ローダーのコンストラクターでSQLiteDatabaseを開いています。
しかし、どこで接続を再度閉じるのですか?
android - AsyncTaskLoaderからUIを更新します
私は自分AsyncTask
をに変換しましたAsyncTaskLoader
(主に構成の変更に対処するため)。TextView
進行状況として使用していてonProgressUpdate
、AsyncTask
を更新するために使用していました。AsyncTaskLoader
同等のものがあるようには見えないので、 loadInBackground
(でAsyncTaskLoader
)私はこれを使用しています:
私はこれをで使用しているFragment
ので、を使用していgetActivity()
ます。これは、画面の向きを変更するなどの構成変更が発生した場合を除いて、非常にうまく機能します。私AsyncTaskLoader
は走り続けます(それが私がを使用している理由ですAsyncTaskLoader
)が、runOnUiThread
スキップされるようです。
なぜスキップされているのか、またはこれがからUIを更新するための最良の方法であるかどうかはわかりません AsyncTaskLoader
。
アップデート:
AsyncTask
UIの更新に適していると思われるため、最終的にはに戻りました。AsyncTask
で機能するものをとマージできることを望みAsyncTaskLoader
ます。