問題タブ [android-asynctask]
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 - AsyncTask がまだバックグラウンドで実行されている場合、Activity.finish() はどうなりますか?
AsyncTask がまだバックグラウンドで実行されている場合、Activity.finish() はどうなりますか?
アクティビティ スタックからアクティビティをポップするだけで、AsyncTask が完全に完了するまでアクティビティ オブジェクトを破棄するのを待ちますか (AsyncTask はアクティビティの内部クラスであるため)。
また、AsyncTask が、Activity のインスタンスへの参照を保持していない非内部クラスの public である場合、動作が異なるでしょうか?
android - 実行中のAsyncTaskをキャンセルする理想的な方法
を使用して、バックグラウンドスレッドでリモートオーディオファイルフェッチおよびオーディオファイル再生操作を実行していますAsyncTask
。Cancellable
フェッチ操作が実行されている間、進行状況バーが表示されます。
AsyncTask
ユーザーが操作をキャンセル(決定)したときに実行をキャンセル/中止したい。そのような場合を処理する理想的な方法は何ですか?
android - Service クラスで AsyncTask を使用することは可能ですか?
すべてはタイトルにあります。
公式ドキュメントにはNote that services, like other application objects, run in the main thread of their hosting process
、AsyncTask は UIThread で実行された場合にのみ機能すると記載されています。
Service クラスで AsyncTask を使用することは可能ですか?
私はそうしようとしていますが、常に同じエラーが発生します
...
私は何か間違ったことをしていますか、それともこれは単に不可能ですか?
これが私のサービスクラスのコードです
android - 別のアクティビティメソッドからアクティビティUIを更新しますか?
タブの1つがチャットタイプの機能であるタブウィジェットがあります。チャットデータを一定間隔で更新したい(チャットタブがアクティブかどうかによって異なります)。
最善のアプローチは、メインのTabActivityクラスでAsyncTaskを使用することであるように思われました。これにより、AsyncTaskの実行中にバックグラウンドでチャットアクティビティが破棄される問題を回避できます。アクティビティが破棄および再作成されないようにしたかったので、AsyncTaskが実際のアクティブなアクティビティのデータを変更できなくなりました。
ただし、AsyncTaskがTabActivityアクティビティに含まnotifyDataSetChanged()
れているため、メソッドからチャットのListAdapterを直接呼び出す方法はありonPostExecute()
ません。TabHost / TabActivityから特定のタブの現在のアクティビティへの参照を取得する方法はありますか?
または、代わりに、チャットアクティビティがTabActivityアクティビティの子アクティビティとして破棄されることはなく(少なくともTabActivityがアクティブな間は破棄されない)、AsyncTaskをチャットアクティビティに配置するだけでよいと想定できますか?
android - 同じアクティビティが2回呼び出されました...複数のAsyncTasksで問題が発生しますか?
3つのファイルをダウンロードするためのAsyncTaskの3つの同時インスタンスがあります。2つの特定のフラグが終了したら、最後にonPostExecute()
それぞれによって設定されたフラグをチェックし、両方が真である場合はstartActivity()
、次のアクティビティを呼び出します。
私は現在、2回呼び出されるアクティビティ、またはこのタイプの動作に似たものを見ています。画面は次のアクティビティへの「左にスワイプ」のような遷移を実行するため、2回実行されることがあります(そして、私が戻ると、同じアクティビティに戻ります)。アクティビティスタックに配置されているのは、1回だけ呼び出される必要があるアクティビティの2つのバージョンであることは明らかです。
これは、両方のonPostExecute()が同時に実行され、両方がまったく同時に設定されたフラグを互いにチェックしているためでしょうか?2つのプロセスを行ごとに並行して実行する必要があるため、これは非常にありそうにありません...
*****編集***私は間違っていると思っていたので、この質問から多くのことを削除しました。それでも、ここでの答えは非常に有用であることがわかったので、有用な部分を反映するように質問を編集しました。
android - AsyncTaskでトーストを上げる方法、ルーパーを使用するように求められます
バックグラウンドでAsyncTaskによって完了したタスクがあります。ある時点で、何かが完了したことを示すトーストを発行する必要があります。
試しましたが失敗しました
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
どうやってやるの?
android - 別のスレッドでListViewに画像をロードする安全で標準的な方法は?
この質問をする前に、次のものを検索して読みました: ListView Android での画像の遅延読み込み - ListView への画像の遅延読み込みに関する問題
私の問題は、私が持っていることですListView
。
- 各行には が含まれており
ImageView
、そのコンテンツはインターネットからロードされます - 各行のビューは、ApiDemo の List14 のようにリサイクルされます
最終的に欲しいもの:
- ユーザーがスクロールしたときにのみ、画像を遅延して読み込みます
- 応答性を維持するために、異なるスレッドに画像をロードします
私の現在のアプローチ:
- アダプターの
getView()
メソッドでは、他の子ビューをセットアップするのとは別に、インターネットからビットマップを読み込む新しいスレッドを起動します。その読み込みスレッドが終了すると、Bitmap
に設定される が返されます (またはImageView
を使用してこれを行います)。AsyncTask
Handler
- 私は s をリサイクルするので
ImageView
、最初に でビューを設定しBitmap#1
、後でBitmap#2
ユーザーが下にスクロールしたときに に設定したい場合があります。Bitmap#1
読み込みよりも時間がかかる場合がBitmap#2
あるため、ビューが上書きBitmap#2
される可能性があります。WeakHashMap
そのビューに最後Bitmap
に設定したいものを記憶する を維持することで、これを解決します。
以下は、私の現在のアプローチの擬似コードです。わかりやすくするために、キャッシングなどの他の詳細は省略しました。
まだ問題があります: 一部の画像がまだロードされている間にアクティビティが破棄された場合はどうなりますか?
- アクティビティが既に破棄されているときに、読み込みスレッドが後で ImageView にコールバックするリスクはありますか?
- さらに、
AsyncTask
下にいくつかのグローバルスレッドプールがあるため、長いタスクが不要になったときにキャンセルされない場合、ユーザーが表示
しないものをロードするのに時間を無駄にする可能性があります. このことをグローバルに保持するという私の現在の設計はあまりにも醜く、最終的には私の理解を超えたリークが発生する可能性があります.ImageLoader
このようなシングルトンを作成する代わりに 、実際ImageLoader
に異なる の個別のオブジェクトを作成しActivities
、Activity
が破棄されると、そのすべてAsyncTask
がキャンセルされることを考えています。これはあまりにも厄介ですか?
とにかく、Androidでこれを行う安全で標準的な方法があるのだろうか. さらに、私はiPhoneを知りませんが、同様の問題があり、この種のタスクを行う標準的な方法はありますか?
どうもありがとう。
android - 別のクラス/サービスから AsyncTask メソッドを呼び出す (コールバック?)
AsynTask クラス内で定義された特定のメソッドを別のクラスやサービスから呼び出すことができるかどうか疑問に思っていましたか? 私の特定のケースでは、いくつかのサウンドを再生するサービスがありますが、サウンドは利用可能なサウンドのリストから選択されます...
サウンドが選択されると、ホーム サーバーからダウンロードされますが、これには時間がかかります (それほど時間はかかりません。たとえば、3 ~ 4 秒ほどかかります。サウンド/エフェクトのサイズは大きくありません)。私はそれらのサウンドを再生するサービスを持っているということです.1つを選択すると、進行状況ダイアログを表示したかったのです.方法は(私が正しく理解していれば)AsyncTaskを使用することですが、AsyncTaskが行う唯一のことは私に伝えることです.サーバーから特定のサウンドを再生するサービス...したがって、サービスからAsynctaskへの「コールバック」はありません...
どうすればそれを達成できますか?別のクラスにある実行中の AsyncTask を呼び出して、すべての作業が完了したことを伝えて、 ProgressDialog の表示を停止するにはどうすればよいですか? それとも私はそれを過度に設計していて、他の方法がありますか? 前もって感謝します...
android - 非同期タスクを使用したAndroidアクティビティのテスト
で非同期タスクを開始するAndroidアクティビティの単体テストをどのように作成しますonCreate
か?これらのタスクの結果をテストしたいと思います。
android - Androidでサービスを使用する場合
メインアクティビティでボタンを押すと応答してデータをフェッチするクラスがあります。残念ながら、このクラスはアクティビティでもサービスでもないため、問題が発生し続けます。たとえば、コンテキストがないと、リソースIDを文字列に変換できません。
このクラスをサービスにし、メインのアクティビティでクラスが閉じられたときにクラスを停止する必要がありますか?このように、アクティビティからこのクラスにコンテキストを渡す必要がありますか?
または、この問題を処理するためのより良い方法はありますか?
この問題は、このクラスからトーストを送信しようとしたときにも発生します。
更新: ErichとJanuszAsyncTask
は、新しいスレッドを作成し、そのスレッドを強制終了しないことを除いて、完全に機能するクラスの方向を示しました。これは、ユーザーがボタンを押すたびに、別のスレッドが追加され、古いスレッドがそこに座っていることを意味します。