タグ付けされた質問 「android-asynctask」

android.os.AsyncTaskに関する質問に使用します

15
Androidでファイルをダウンロードし、進行状況をProgressDialogに表示する
更新される簡単なアプリケーションを書こうとしています。このために私は、ファイルをダウンロードすることができ、簡単な機能必要な現在の進行状況を示して中をProgressDialog。の方法は知っていProgressDialogますが、現在の進行状況を表示する方法とファイルを最初にダウンロードする方法がわかりません。

21
AsyncTask Androidの例
について読んでいてAsyncTask、以下の簡単なプログラムを試しました。しかし、それは機能していないようです。どうすれば機能させることができますか? public class AsyncTaskActivity extends Activity { Button btn; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener((OnClickListener) this); } public void onClick(View view){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { @Override protected …

7
Androidの基本:UIスレッドでコードを実行する
UIスレッドでコードを実行する観点から、以下の間に違いはありますか? MainActivity.this.runOnUiThread(new Runnable() { public void run() { Log.d("UI thread", "I am the UI thread"); } }); または MainActivity.this.myView.post(new Runnable() { public void run() { Log.d("UI thread", "I am the UI thread"); } }); そして private class BackgroundTask extends AsyncTask<String, Void, Bitmap> { protected void onPostExecute(Bitmap result) { Log.d("UI thread", …

21
Androidでトーストを表示する方法は?
引き上げ可能なスライダーがあって、地図が表示されます。スライダーを上下に動かして、地図を表示または非表示にすることができます。地図が前面にある場合、その地図でタッチイベントを処理できます。タッチするたびに、a AsyncTaskが起動し、データをダウンロードして、データToastを表示するを作成します。タッチイベントでタスクを開始しましたが、スライダーを閉じるまでトーストは表示されません。スライダーを閉じて地図が表示されなくなるとToastが表示されます。 何か案は? タスクを開始してください 編集: public boolean onTouchEvent(MotionEvent event, MapView mapView){ if (event.getAction() == 1) { new TestTask(this).execute(); return true; }else{ return false; } } onPostExecuteトーストを作ります Toast.makeText(app.getBaseContext(),(String)data.result, Toast.LENGTH_SHORT).show(); new TestTask(this)では、これはへの参照でMapOverlayあり、への参照ではないためMapActivity、これが問題でした。

13
ハンドラーvs AsyncTask vsスレッド[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 10か月前に閉鎖。 私は少しの違いについて混乱してしまったHandlers、AsyncTaskとThreadsのAndroidインチ StackOverflowでかなりの数のブログと質問を読みました。 HandlerUIと通信するためのバックグラウンドスレッドです。たとえば、進行状況バーの更新はを介して行う必要がありますHandler。ハンドラーを使用すると、の利点が得MessagingQueuesられるため、メッセージをスケジュールしたり、複数のUI要素を更新したり、タスクを繰り返し実行したりする場合に役立ちます。 AsyncTaskは似ていますがHandler、実際にはを使用しますが、UIスレッドでは実行されないため、データのフェッチ(Webサービスのフェッチなど)に適しています。後でUIを操作できます。 Threadただし、UIと対話できず、より「基本的な」スレッドを提供し、のすべての抽象化を見逃しますAsyncTask。 ただし、ソケット接続を実行したいのですが。これはハンドラーまたはスレッドで実行する必要がありAsyncTaskますか?UIの操作はまったく必要ありません。使用するパフォーマンスの点で違いはありますか? 一方、ドキュメントは大幅に改善されました。

17
AsyncTaskは別のクラスなので、OnPostExecute()の結果をメインアクティビティに取得するにはどうすればよいですか?
この2つのクラスがあります。私のメインアクティビティとを拡張するAsyncTaskアクティビティ。次に、メインアクティビティOnPostExecute()で、から結果を取得する必要がありAsyncTaskます。メインのアクティビティに結果を渡したり、取得したりするにはどうすればよいですか? これがサンプルコードです。 私の主な活動。 public class MainActivity extends Activity{ AasyncTask asyncTask = new AasyncTask(); @Override public void onCreate(Bundle aBundle) { super.onCreate(aBundle); //Calling the AsyncTask class to start to execute. asyncTask.execute(a.targetServer); //Creating a TextView. TextView displayUI = asyncTask.dataDisplay; displayUI = new TextView(this); this.setContentView(tTextView); } } これはAsyncTaskクラスです public class AasyncTask extends AsyncTask<String, Void, …

3
警告:このAsyncTaskクラスは静的でなければなりません。そうでないと、リークが発生する可能性があります
コードに次のような警告が表示されます。 このAsyncTaskクラスは静的でなければなりません。そうでないとリークが発生する可能性があります(匿名のandroid.os.AsyncTask) 完全な警告は次のとおりです。 このAsyncTaskクラスは静的である必要があります。そうしないとリークが発生する可能性があります(匿名のandroid.os.AsyncTask)。静的フィールドはコンテキストをリークします。非静的内部クラスには、外部クラスへの暗黙的な参照があります。その外部クラスが例えばフラグメントまたはアクティビティである場合、この参照は、実行時間の長いハンドラー/ローダー/タスクが、ガベージコレクションが実行されないようにするアクティビティへの参照を保持することを意味します。同様に、これらの長時間実行インスタンスからのアクティビティとフラグメントへの直接フ​​ィールド参照は、リークを引き起こす可能性があります。ViewModelクラスは、ビューまたは非アプリケーションコンテキストを決して指すべきではありません。 これは私のコードです: new AsyncTask<Void,Void,Void>(){ @Override protected Void doInBackground(Void... params) { runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); return null; } }.execute(); どうすれば修正できますか?

12
AsyncTaskは本当に概念的に欠陥があるのですか、それとも何か不足していますか?
私は今月この問題を調査してきましたが、さまざまな解決策を考え出しましたが、それらはすべて大規模なハックなので、満足できません。デザインに欠陥のあるクラスがフレームワークに組み込まれ、誰もそれについて話していないとはまだ信じられないので、私は何かを逃しているにちがいないと思います。 問題はにありAsyncTaskます。ドキュメントによると 「スレッドやハンドラーを操作しなくても、UIスレッドでバックグラウンド操作を実行して結果を公開できます。」 次に、例では引き続き、いくつかの例示的なshowDialog()メソッドがで呼び出される方法を示しますonPostExecute()。ただし、ダイアログを表示するには常に有効なへの参照が必要であり、AsyncTask がコンテキストオブジェクトへの強い参照を保持してはならないため、これは私には完全にContext不自然に思われます。 その理由は明らかです。タスクをトリガーしたアクティビティが破棄された場合はどうなりますか?これは常に発生する可能性があります。たとえば、画面をめくった場合などです。タスクは、それを作成したコンテキストへの参照を保持したい場合、あなたは(ウィンドウが破壊されているでしょうし、無用なコンテキストオブジェクトへの上に保持しているだけでなく、任意の UIの相互作用が例外で失敗します!)、あなたもAを作成する危険性メモリーリーク。 私のロジックにここで欠陥がない限り、これは次のように変換されます:onPostExecute()コンテキストにアクセスできない場合にこのメソッドをUIスレッドで実行するのはどのようなメリットがあるので、これはまったく役に立たないのですか?ここでは意味のあることは何もできません。 回避策の1つは、コンテキストインスタンスをAsyncTaskに渡すのではなく、Handlerインスタンスを渡すことです。これは機能します。ハンドラーはコンテキストとタスクを緩やかにバインドするため、リークの危険を冒すことなく、それらの間でメッセージを交換できます(正しいですか)。しかし、それはAsyncTaskの前提、つまりハンドラーに煩わされる必要がないということは間違っていることを意味します。同じスレッドでメッセージを送受信しているため、ハンドラーを悪用しているようにも見えます(UIスレッドでメッセージを作成し、UIスレッドで実行されるonPostExecute()で送信します)。 さらに、その回避策を使用しても、コンテキストが破棄されたときに、それが起動したタスクの記録がないという問題があります。つまり、たとえば画面の向きが変わった後など、コンテキストを再作成するときにタスクを再起動する必要があります。これは遅く、無駄です。 これに対する私の解決策(Droid-Fuライブラリで実装されている)は、WeakReferencesのコンポーネント名から、一意のアプリケーションオブジェクトの現在のインスタンスへのマッピングを維持することです。AsyncTaskが起動すると、そのマップに呼び出しコンテキストが記録され、コールバックごとに、そのマッピングから現在のコンテキストインスタンスがフェッチされます。これにより、失効したコンテキストインスタンスを参照することがなくなり、コールバック内の有効なコンテキストに常にアクセスできるため、そこで有効なUI作業を実行できます。また、参照が弱く、特定のコンポーネントのインスタンスが存在しなくなったときにクリアされるため、リークも発生しません。 それでも、これは複雑な回避策であり、いくつかのDroid-Fuライブラリクラスをサブクラス化する必要があるため、これはかなり煩わしいアプローチになります。 今私は単に知りたいです:私は何かを大規模に欠落していますか、それともAsyncTaskは本当に完全に欠陥がありますか?あなたの経験はどのように機能していますか?これらの問題をどのように解決しましたか? ご入力いただきありがとうございます。

7
複数のAsyncTaskを同時に実行する—不可能ですか?
2つのAsyncTaskを同時に実行しようとしています。(プラットフォームはAndroid 1.5、HTC Heroです。)ただし、最初にのみ実行されます。これが私の問題を説明する簡単なスニペットです: public class AndroidJunk extends Activity { class PrinterTask extends AsyncTask<String, Void, Void> { protected Void doInBackground(String ... x) { while (true) { System.out.println(x[0]); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); } } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new PrinterTask().execute("bar bar …

6
読み込み中にImageViewで「アニメーションサークル」を使用する
私のアプリケーションでは現在、表示に1秒程度かかる可能性があるリストビューを使用しています。 私が現在行っていることは、リストビューの@ id / android:emptyプロパティを使用して「読み込み」テキストを作成することです。 <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="Loading..."/> 今、私はそれをこのテキストの代わりに読み込みダイアログで使用されるアニメーション化された円に置き換えたいと思います、私はあなたが私が何を意味するか知っていると思います: 編集:ダイアログは必要ありません。私はそれを私のレイアウトの中に示したいです。 あなたの助けに感謝します!

8
アンドロイド。フラグメントgetActivity()がnullを返すことがある
開発者コンソールのエラーレポートで、NPEの問題があるレポートが表示されることがあります。コードの何が問題なのか理解できません。エミュレーターと私のデバイスアプリケーションはforceclosesなしで正常に動作しますが、一部のユーザーは、getActivity()メソッドが呼び出されたときにフラグメントクラスでNullPointerExceptionを受け取ります。 アクティビティ pulic class MyActivity extends FragmentActivity{ private ViewPager pager; private TitlePageIndicator indicator; private TabsAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { pager = (ViewPager) findViewById(R.id.pager); indicator = (TitlePageIndicator) findViewById(R.id.indicator); adapter = new TabsAdapter(getSupportFragmentManager(), false); adapter.addFragment(new FirstFragment()); adapter.addFragment(new SecondFragment()); indicator.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // push first task FirstTask firstTask = new FirstTask(MyActivity.this); …


12
AndroidでのAsyncTaskとエラー処理
私は使用してから私のコードを変換していますHandlerしAsyncTask。後者は、非同期UIの結果とメインUIスレッドでの結果の処理で、その機能が優れています。私に不明確なのは、何かがうまくいかない場合の例外の処理方法ですAsyncTask#doInBackgroundです。 私が行う方法は、エラーハンドラーを用意し、それにメッセージを送信することです。それはうまくいきますが、それは「正しい」アプローチですか、それとももっと良い代替案がありますか? また、エラーハンドラーをアクティビティフィールドとして定義すると、UIスレッドで実行する必要があることも理解しています。ただし、(非常に予期できない)例外が発生し、トリガーされたコードがHandler#handleMessage間違ったスレッドで実行されていることがわかります。Activity#onCreate代わりにエラーハンドラを初期化する必要がありますか?に配置runOnUiThreadすることHandler#handleMessageは冗長に見えますが、非常に確実に実行されます。


18
java.lang.IllegalStateException:onSaveInstanceStateの後でこのアクションを実行できません
アプリのサポートライブラリを使用しています。私のFragmentActivityでは、インターネットからデータをダウンロードするためにAsyncTaskを使用しています。onPreExecute()メソッドでFragmentを追加し、onPostExecute()メソッドでもう一度削除します。その間に方向が変更されると、上記の例外が発生します。詳細をご覧ください: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); } @Override protected void onPostExecute(String result) { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute"); ft = fm.beginTransaction(); ft.remove(dummyFragment); ft.commit(); } @Override …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.