問題タブ [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.

0 投票する
61 に答える
498705 参照

java - Androidでインターネットアクセスを確認する方法は?InetAddressがタイムアウトすることはありません

AsyncTaskホスト名へのネットワークアクセスをチェックすることになっているを取得しました。しかし、doInBackground()がタイムアウトすることはありません。誰か手がかりがありますか?

0 投票する
12 に答える
74833 参照

android - Android での AsyncTask とエラー処理

Handlerコードを usingから に変換していますAsyncTask。後者は、メイン UI スレッドでの非同期更新と結果の処理という点で優れています。私には不明な点は、何かがおかしくなった場合に例外を処理する方法ですAsyncTask#doInBackground

私が行う方法は、エラー Handler を用意してメッセージを送信することです。それはうまくいきますが、それは「正しい」アプローチですか、それともより良い代替手段がありますか?

また、エラー Handler を Activity フィールドとして定義すると、UI スレッドで実行する必要があることも理解しています。ただし、(非常に予想外に) 例外が発生し、トリガーされたコードがHandler#handleMessage間違ったスレッドで実行されているというメッセージが表示されることがあります。Activity#onCreate代わりにエラー Handler を初期化する必要がありますか? 配置は冗長runOnUiThreadHandler#handleMessage思えますが、非常に確実に実行されます。

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

android - Android-AppWidgets、AlarmManager、AsyncTask

AlarmManager生成されたブロードキャストでアプリウィジェットを更新するのはあまりうまくいきません。これが私がすることです:

で初期AlarmManagerAppWidgetProvider#onEnabled

また、によって起動された更新を単にリッスンするブロードキャストレシーバーを定義しますAlarmManagerAsyncTask更新が実行されると、ネットワーク呼び出しを行うコードが実行されます。AsyncTaskが完了すると()onPostExecute、以前に取得したインスタンスを使用しAppWidgetManagerてウィジェットを更新します。ログにメッセージが表示されるまで、すべてが実際に正常に実行されます。"Process com.foo.myapp (pid 12345) has died"その後、AlarmManager別の更新が実行されることはありません。

アラームを再開する何らかのチェックが必要ですか?たとえば、ユーザーがウィジェットの親アプリにアクセスする場合はどうなりますか?リクエストの途中でアプリが停止した場合に、長時間実行されるタスクを完了してウィジェットに戻ることができるようにするにはどうすればよいですか?

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

java - AsyncTask とコンテキスト

そこで、AsyncTask クラスで Android を使用して、初めてのマルチスレッド アプリケーションを作成しています。これを使用して 2 番目のスレッドで Geocoder を起動し、onPostExecute で UI を更新しようとしていますが、適切なコンテキストで問題が発生し続けています。

メイン スレッドで Contexts を使用するのに苦労しましたが、Context とは何か、またはバックグラウンド スレッドで使用する方法が正確にはわかりません。また、良い例も見つかりませんでした。何か助けはありますか?これが私がやろうとしていることの抜粋です:

Contextが不適切なため、6行目で失敗し続けます。

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

android - AsyncTask と Timer を使用して XML を取得するには?

サーバーから XML データを繰り返し取得するために、 Mark Murphy の提案に従って AsyncTask と Timer を使用しようとしています。

次のエラーが表示されます。

Windows の Eclipse で SDK 1.5 を使用しています。

ドキュメント、StackOverflow、および Android Developers グループを調べましたが、エラーの原因や修正方法がわかりません。

データを 1 回 (つまり、Async と Timer なしで) 取得し、SAX 経由で問題なく解析できます。

以下の完全なアプリコード。

単純なエラーはご容赦ください。私は Android を初めて使用します。

0 投票する
4 に答える
29889 参照

android - AndroidAsyncTaskコンテキストの動作

私はAndroidでAsyncTasksを使用していて、問題に取り組んでいます。

簡単な例として、1つのAsyncTaskを持つアクティビティを取り上げます。バックグラウンドでのタスクは見事なことは何もしません。8秒間スリープするだけです。

onPostExecute()メソッドのAsyncTaskの最後で、ボタンの表示ステータスをView.VISIBLEに設定しているだけで、結果を確認するだけです。

これで、AsyncTaskの動作中に(8秒のスリープウィンドウ内で)ユーザーが電話の向きを変更することを決定するまで、これはうまく機能します。

Androidアクティビティのライフサイクルを理解しており、アクティビティが破棄されて再作成されることを知っています。

ここで問題が発生します。AsyncTaskはボタンを参照しており、最初にAsyncTaskを開始したコンテキストへの参照を保持しているようです。

この古いコンテキスト(ユーザーが向きを変更したため)がnullになり、AsyncTaskが表示しようとしているボタンへの参照用にNPEをスローすることを期待します。

代わりに、NPEはスローされず、AsyncTaskはボタン参照がnullではないと見なし、表示に設定します。結果?画面には何も起きていません!

更新:WeakReferenceアクティビティを維持し、構成の変更が発生したときに切り替えることで、これに取り組んでいます。これは面倒です。

コードは次のとおりです。

それを実行してみて、AsyncTaskが機能している間に電話の向きを変更してください。

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

android - Android - ArrayAdapter を使用して一度に 1 つずつ ListView に項目を追加して表示する

ArrayAdapter を使用して項目をカスタム ListView に追加し、結果を Android アプリに表示しています。私が抱えている問題は、ArrayAdapter がビューを表示する前にすべての項目が入るまで待機しているように見えることです。つまり、項目を ArrayAdapter に追加し、notifyDataSetChanged を呼び出すと、追加された項目を表示するために ListView が更新されません。すべてのアイテムが追加され、アイテムを表示する前に GetView が呼び出されるまで待機します。

私がやりたいのは、ListViewに追加した直後にアイテムを表示することです。これは可能ですか?

関連するコードは次のとおりだと思います。

ご覧のとおり、add メソッドの後で notifyDataSetChanged を呼び出していますが、実際にはビューは更新されません。上記のループが終了した後、ビューは最終的に更新されます (私が知っていることに基づいて、これは、コードのこのセクションが完了するまで GetView が呼び出されないためです)。

カスタム ArrayAdapter の add メソッドをオーバーライドしようとしましたが、そのメソッドのビューにアクセスできないため、うまくいきませんでした。

どんな助けでも大歓迎です:)

バラ

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

android - Android で長い (時間のかかる) アクションを配置するにはどうすればよいですか?

たとえば、私たちは SomeActivity にいて、アクティビティには、あるディレクトリから別のディレクトリへのファイルの移動を呼び出すボタンがあります (ジョブと呼びましょう)。

BlackBerry では、次のことを行います。

  1. 「お待ちください...」というキャンセル不可のポップアップ(ダイアログ画面)をプッシュします。
  2. 仕事を遂行するスレッドを開始する
  3. スレッドの完了時にポップアップを閉じる

このアプローチにより、タスクが終了した後も同じ画面にとどまることが 99.99% 保証されます。ユーザーはポップアップを見て、ジョブの完了を待つだけです。デバイスの回転など、目的のワークフローを壊さないもの。

Android では状況が変わります。私のケースを解決するためにおそらく提供されている AsyncTask があることは知っています。それがどのように使用されるべきかの良い例さえあります。ただし、Activity インスタンスが存続する期間は保証されていないため、AsyncTask は onSaveInstanceState でキャンセルする必要があります (onRestoreInstanceState で再開します)。これは、AsyncTask を使用すると、開始したジョブを完全に実行できるという保証がないことを意味します。場合によっては、ユーザーを作成するための http 投稿要求を送信するときに、AsyncTask の再実行時に「このログインにユーザーが既に存在する」という問題に遭遇したくない場合があります。これが可能なのは、リクエストが送信されている間に AsyncTask が中断される可能性があるためです (そして、サーバーは実際に新しいユーザーを作成している間)、応答を受け取る前に AsyncTask がキャンセルされます。

上記の BB のような動作を取得するための Android 上の解決策はありますか?

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

java - Service または AsyncTask または Handler をいつ使用するか?

誰かが本当の違いを教えてもらえますか?

0 投票する
2 に答える
644 参照

java - 1 つのアクティビティがあります。このアクティビティで AsyncTask を実行しましたが、機能しません

基本的に、私の目的は次のとおりです。

  1. 緯度/経度を 1 分ごとに Web サイトに常に投稿します。
  2. もちろん、これを別のスレッドで実行したいので、UI スレッドが混乱することはありません。この AsyncTask はそれを解決するはずですが、エラーが発生し、その理由がわかりません。

私の目的を達成するために何ができますか? それは非常に簡単です...場所をスキャンし、バックグラウンドで毎分 Web に投稿するだけです。

ちなみに私の onCreate メソッドはこんな感じです。基本的にはそれだけです。