問題タブ [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.
java - AsyncTask からオブジェクトを返す際の問題
AsyncTask を拡張するクラス (RestClient.java) があります。
メイン クラス (Main.java) で AsyncTask を実行しようとしています。
json は onPostExecute() の前に呼び出されるため、null です。JSON を取得するにはどうすればよいですか?
更新: onPostExecute() でこの try ブロックを実行する必要があります:
android - 状態が RUNNING であるにもかかわらず、AsyncTask が実行されないことがありますか?
私のアプリケーションでは、Activity の起動時に AsyncTask を使用して、特定の連絡先の着信音を取得します。
正常に動作しますが、AsyncTask が doInBackground メソッドに到達する前にアプリケーションが 2 回停止された場合、Activity が再び開始されたときに AsyncTask が正しく実行されず、onPreExecute() メソッドに到達するだけであることに気付きました。
これが私のコードです:
AsyncTask 自体:
起動時に AsyncTask を呼び出す場所:
AsyncTask が終了する前にアクティビティを開始してアクティビティを閉じると問題が発生します。これが 1 回発生した場合は問題ないように見えますが、2 回目に発生した後、AsyncTask は onPreExecute() メソッドに到達するだけで完了しません。アプリケーションが強制停止されて再起動されるまで、もう一度。
なぜこれが起こるのか誰にも分かりませんか?
android - 以前にキャンセルされた後、アクティビティの開始時に実行する AsyncTask が失敗する
アプリケーションの起動時に連絡先の着信音を取得するために AsyncTask を使用しています。AsyncTask 中にアクティビティが数回閉じられるまで正常に動作します。これが発生した後、AsyncTask は onPreExecute() にのみ到達し、doInBackground には到達しません。 、そのため、強制停止またはデバイスの再起動のいずれかが行われるまで、着信音を取得することはできません。
なぜこれが起こっているのか、誰か説明できますか?
AsyncTask が onPreExecute に到達するのに doInBackground() を実行しないのはなぜですか?
ここに私のコードがあります:(Shelfのソースコードに従う)
--
onAddRingtone() は onCreate で使用され、onCancelRingTone() は onDestroy() で使用されています。
私はこれに 3 日間費やしましたが、解決策を見つけることができませんでしたか? 私は間違ったアプローチを取っていますか?キャンセルの使い方が間違っていませんか?バグはありますか?
android - Asynctask エラー処理
バックグラウンド計算を実行するために使用AsyncTask
していますが、例外を処理する正しい方法を見つけることができません。現在、次のコードを使用しています。
変数 e は、メイン スレッドとワーカー スレッドの両方で書き込み/アクセスできると思います。onPostExecute()
終了後にのみ実行されることがわかっているのでdoInBackround()
、同期を省略できますか?
これは悪いコードですか?で例外を処理するための合意された、または正しい方法はありAsyncTask
ますか?
java - AlarmManager を使用して AsyncTask でダウンロードが失敗したときに再試行を実行する方法
を使用しAlarmManager
て、Web からファイルをダウンロードしようとするサービスを実行します。失敗した場合は、5 分後にそのサービスを再試行したいと思います。
サービス内でAsyncTask
を実行してコードを実行します。私の知る限り、失敗したかどうかを判断できる唯一の方法はonPostExecute()
.
そのサービスの再試行を再度実装する最良の方法は何ですか?
android - Android アクティビティで通知を処理する方法
x 秒ごとに RESTful API を照会するアクティビティがあります (ハンドラーを使用してポーリングします)。GET の結果は、ListView を更新するために使用されます。これは、AsyncTask を使用して行われます。
新しいデータで特定の基準が満たされたときに、通知バーに通知を表示したいと考えています。ここまで読んだことはすべて、アプリケーションがフォーカスされていないときでも通知を行うことができるように、サービスを使用して通知を作成および更新する必要があることを示唆していました。私はこれの肯定的な側面を見ます。
ただし、アクティビティ内からサービスを作成するだけでよいのか、それよりも複雑なことをする必要があるのか わかりません。Service を使用してリスト ビューを更新することを優先して、AsyncTask モデルを廃棄する必要があるかどうか、私は未定です。
だから、私の質問は次のとおりです。
1) アクティビティからローカル サービスを作成する方法を示す優れたチュートリアルはありますか?
チュートリアルでは、それらを通信させる方法を示す必要はありません。サービスはメイン アクティビティから分離できます。
2) #1 は、私が探している通知特典を提供してくれますか? (メインアプリが表示されていない場合でも通知が生成されます)
3) これと同じサービスを使用してリストビューを更新する必要がありますか?
このサービスは、基本的に AsyncTasks と同じクエリを作成し、結果に対して異なることを行うだけです。このアプリは、Service クエリを実行し、通知処理を行い、結果をアクティビティに渡す方が理にかなっているように見えますが、このようなことを行う方法を明確に示している適切なリソースは見つかりませんでした。
必要に応じて、必要なコードを追加したり、さらに説明したりできます。
android - 多くのAsyncTasksスポーンでのAsyncTaskパフォーマンスの問題。
デバイスとWebの両方からの画像用のレイジー画像ローダーを作成しようとしていますListView
。何を使用するか、そしてどのようにリクエストをプールするスレッドを使用できるかを考えています(常に実行されており、ビューとアダプターをアタッチでき、画像の読み込みを処理します)、すでにキャッシュします画像を読み込んで、読み込む前に画像の可視性をチェックするので、不要な作業をしません。
AsyncTask
私はフォーラムで多くの提案のようなものを使用することについて別の考えを持っていました。ただし、欠点が1つあります。new MyTask().execute(urls);
オンデマンドで画像の読み込みを開始して停止したい場合、これを使用すると問題が発生することがよくあります。イメージごとに非同期タスクを使用する場合は、イメージごとに新しい非同期タスクが必要です。これは多くの「新しい」ものであり、プールを使用できますが、スタックしている非同期タスクが多すぎる場合でも、約150を作成します- 200のasycタスク、私の好みには多すぎます...
皆さんはどう思いますか?私はスレッドがここでより良い仕事をするだろうと思います:
- 殺されるまで走り続ける
- キューからジョブを取得してみてください。ジョブでない場合は、待機してください。
- ジョブが利用可能な場合は、それを取得して処理を開始します。
- 各リクエストは単独でシリアルに処理され、スレッドをブロックします。
- 一度は「2」を続けます。
startLoadingImage()
表示する必要のあるビューを使用してアダプターによって実行される各エンキューは、新しいジョブを作成し、待機ロックで通知を呼び出します。
複数のGET\POSTリクエストを並行して実行したい場合は、スレッドのプールを使用してこのコードを最適化できます。また、次のアクセスで高速にロードするために、すでにダウンロード/ロードした画像をキャッシュしています。アイデアは、GCとリストの遅れを最小限に抑えることです。
android - TextViewとHtml.ImageGetterを非同期に使用してAndroidに画像を表示しますか?
以下のメソッドからaTextView
を設定したい:SpannableString
ただし、ImageGetter
ここでは以下のメソッドをオーバーライドする必要があります。
インターネットからドローアブルを取得する必要があるため、非同期で行う必要があり、そうではないようです。
それを機能させる方法は?ありがとう。
android - Android の設計上の考慮事項: AsyncTask とサービス (IntentService?)
次の手順を実行する必要がある Android アプリを設計しています。
- ユーザーがボタンを押すか、「データの同期」を指示します。
- 同期プロセスは、REST Web サービスを使用してサーバーとの間でデータを移動します。
- データは sqlite データベースにローカルに保存されます。
- 同期プロセスは、ステータスの更新/メッセージを UI に提供する必要があります
- ユーザーがアプリケーションの他の部分に移動して、同期プロセス中にさらに作業を行うことを許可しないでください。
初めて同期プロセスを実行するときは、10 ~ 20 分かかる場合があります。最初の同期後、転送および保存されるデータは少なくなり、プロセスにかかる時間は 1 ~ 2 分以内になると思います。
私はアンドロイドAsyncTask
とサービスを使用するさまざまな例について多くのことを読んできました...しかし、設計上の考慮事項と、ある設計を他の設計よりも選択する際のトレードオフを完全には理解していません。現在、AsyncTask を使用してデモ プロジェクトをスタブ化しています。(ほとんどの) Android REST クライアント アプリケーションの開発を見た後 : http://code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html#おそらく私はまだ「理解していない」だけなので、過度に複雑に感じます.
私は、Java、Spring、Web、およびデスクトップ アプリケーションのバックグラウンドを持っています。ハンドヘルド デバイスの観点から考えて設計することは、私にとってまったく新しいことです。(画面レイアウトが変更された場合はどうなりますか?同期の実行中に電話が鳴ったらどうなりますか?) 最初の同期が非常に長時間実行されるプロセスになる場合、2 歩戻って、より良い方法はありますか?私は問題について考えます->解決策、ユーザーエクスペリエンス、電話で実行されているアプリケーションに対するユーザーの期待?
すでにこれらの質問に取り組んでいる、経験豊富な Android 開発者の意見をぜひお聞かせください。
android - Androidでバックグラウンド作業をしているときにAsyncTaskを使用してProgressDialogを表示する方法は?
私は最初の Android アプリを開発しています。バックグラウンド タスク (この場合はサーバーでの http 呼び出し) が発生している間、ProgressDialog を表示する必要があります。私はこれについて少し勉強しましたが、この主題に関連する他のスレッドもすでにチェックしています。
http://developer.android.com/reference/android/os/AsyncTask.html
Android は、アクティビティ UI の読み込みが完了するまで ProgressDialog を表示します
http://android-developers.blogspot.com/2009/05/painless-threading.html
とりわけ。
少しコードを書く必要がありました:
1) My Activity で変数を ProgressDialog 型に宣言します
2) 必要に応じて AsyncTask を拡張する内部クラスも作成しました。ここで doInBackGround では、実際にサーバーへの POST http 要求を実行する静的メソッドを呼び出します。サーバー側では、検証のためにサーバー応答 20 秒をブロックしました。進行状況ダイアログ。
3) ボタンが押されると、ProgressDialog をビルドし、作成した AsyncTask を呼び出します。
AsyncTask がバックグラウンドでサーバーにクエリを実行している間、これは進行状況ダイアログを表示することになっていると思いますが、サーバーの応答が到着するまで進行状況バーが表示されず、わずかな時間 (1 秒未満) ) 進行状況が表示され、次のアクティビティが呼び出されます。
前述したように、このコードを再確認しましたが、どこが間違っているのかがわかりません。助言がありますか?
前もって感謝します。
こんにちは、このスレッドの最初の回答で Charlie Sheen(???) が示唆したように、コードを少し変更してみましたが、次のようになりました (残念ながら、これまでのところ期待どおりに動作していません)。
そして、AsyncTask で応答を処理するすべての作業を行います。
OnClickListener を完成させます。