2013-07-30 11 views
6

まだ私はプログラミングにはまだ初心者ですので、私はmainthreads、非同期タスク、サービス、およびスレッドの概念を完全には理解していません。メインスレッドからいくつかのタスクを実行したいので、私はAndroid用サービスに関するドキュメントを読んでいます。あなたのメインスレッド外の作業を実行する必要がある場合サービスまたはスレッドまたはAsyncTask

が、 ユーザがアプリケーションと対話している間だけ、あなたはおそらく代わりに、新しいスレッドではなくサービスを作成 必要があります。それは言います。

1.アプリケーションを終了した直後に(つまりホームボタン)「スレッド」が停止していると言っていますか?あなたには、いくつかの音楽を再生することが、あなたの 活動が実行されている間だけ、あなたはのonCreate内のスレッド()、ONSTART()でそれを実行している を開始を作成することができますしたい場合は

たとえば、その後、onStopでそれを止めます()。また、従来のThreadクラスの代わりに AsyncTaskまたはHandlerThreadを使用することを検討してください。 スレッドの詳細については、「プロセスとスレッド」のドキュメントを参照してください。

2.スレッドがJavaに焼き付けられると、なぜAndroidにAsyncTasksがあるのですか?

あなたがサービスを使用する場合、それはまだ、デフォルトでは、あなたの アプリケーションのメインスレッドで実行するので、それは集中的または 操作をブロックを実行した場合、あなたはまだサービス内で新しい スレッドを作成する必要があることを覚えておいてください。

3.これは基本的に、ほとんどすべてのサービスが基本的にその内部に作成されたスレッドを持つつもりであることを意味しますか?

4.サービス内でAsyncTaskを開始するのは悪いですか?

答えて

10

1.Are彼らは「スレッド」はすぐに停止することを言っていない、適切に設定しない限り、デフォルトでサービスは、活動と一緒に死にますか?

Threadは、起動したThreadが破壊されたときに破棄する必要があります。したがって、ActivityThreadを開始した場合は、Activityが破壊されたか、Serviceに転送されたときに破棄する必要があります。たとえば、あなたはThreadで音楽を開始し、そこに曲を更新していますがActivityが、スレッドはJavaに焼かれ2.IfはそれがService

に移動する必要があり、その後破棄されたとき、それは遊んで維持したい場合はすることができますなぜアンドロイドはAsyncTasksを持っていますか?

AsyncTaskあなたは、バックグラウンドの作業を実行し、簡単に前にUIを更新することを可能にする時に、それが一つだけであるため、バックグラウンド作業がdoInBackground()以外のビルトインのいずれかの方法を利用して行われた後、これは基本的に意味UI Thread

3.Doesでない実行は、そのほぼすべてのサービスは、基本的には、その中に作成されたスレッドを持っているとしているのでしょうか?

必ずしもしかし、あなたはそれの内部Threadを作成することができ、サービスの内部でAsyncTaskを開始することが悪いこと

4.Would?

いいえこれを行うことができます。

​​は、バックグラウンドでの作業に最適です。その方法により、UIの更新が非常に簡単になります。しかし、あなたはそれらを使う方法を完全に理解するために、ドキュメントを慎重に(たぶん何回か)読む必要があります。また、これらは短命の操作のため、ネットワークデータのダウンロードには適していますが、数秒以上続くものには使用しないでください。(文書によると)

+2

徹底的に!よくやった。 +1 –

+1

きれいで清潔です。 – Raghunandan

5
  1. アプリを離れるとすぐにスレッドは停止しません。別のスレッドを使用するという提案は、あなたのアプリのGUIをブロックしないようにするだけです。

  2. AsyncTasksは実際にはスレッドを作成するために高価なプロセスであるため、実際にはThreadPoolを使用しています。短寿命のタスクが多い場合は、AsyncTaskを使用するだけで、アプリケーションのGUIをブロックすることなく、簡単かつ効率的に実行することができます。

  3. はい、本質的です。サービスはスレッドよりも重い。スレッドの代わりにサービスを使うのは良い考えではありません。また、サービスは実際には他のプロセス全体で実行することもできます。ちょうどFYI。

  4. いいえ短い実行時間のタスクがたくさんある場合は、いい考えです。

メインスレッド以外でタスクを実行しようとしている場合は、サービスは必要ありません。他のスレッドを作成するだけです。

AsyncTask舞台裏では、あなたのタスクをスレッドプールに送信して実行します。ネットワーキングトラフィックの解析など、短命のタスクが多い場合は、AsyncTaskが最適です。

しかし、膨大な量の要求を処理している場合は、タスクを実行しているスレッドプールをより詳細に制御できます。

+0

asynctasksを使用して重労働を実行するように指定してください。それはasynctaskが持っている主な目的の1つです – Dante

+3

いいえ、あなたは非GUIスレッドでネットワークを行う必要があります。非同期タスクは非GUIスレッドで実行されるため*使用できますが、唯一の解決策ではありません。 @Danteいいえ、 'AsyncTask'は必ずしも重労働ではありません。 –

+0

@Keyserそれはあなたが本当にスレッドプールの必要なコントロールに依存します。 'AsyncTask'は、スレッドプールにアクセスするための簡単な方法です。膨大な量のトラフィックを処理するアプリケーションを作成する場合は、パフォーマンスチューニングを制御するために 'AsyncTask'以外のものを使用します。 –

1
  1. UIラグフリーを維持しながらasynctasksが重い作業を行うことができますしながら、メインスレッドは、UIを制御するので。

  2. いいえ、あなたのサービスがインターネットからの読み込みのように重いものにしたい場合は、asynctaskを使用する必要があります。ほとんどのサービスはインターネットからデータをロードするために使用されるため、ほとんどのサービスはasynctasksを持っています。アクティビティが終了した後にサービスを有効にするには、サービスを指定する必要があります。 (:ホームボタンすなわち)アプリを残した後

  3. ませ

+3

スレッドをすぐに終了しても、アプリケーションを終了できません。 –

+0

私の悪い、ちょうど私のアプリでそれをチェックした:P – Dante

+1

あなたと私は一般的に同意する、ここで主張するポイントはありません。良い仕事+1 –

0

スレッドとタスクとprocess.Taskはプロセスの小さな種類です。プロセス はあなたのシステムの例では、タスクマネージャを起動すると、それはインターネットエクスプローラのように実行されているすべてのプロセスが表示されているスレッドを実行するプログラムですが、スレッドは、つまり、いくつかのタスクを実行するために実行中のサブプロセスを言うことができますが、アンドロイドの非同期はスレッドと似ていますが、長くてもかまいません。アンドロイドでは、アンドロイドの電話でテンプルを実行しています。優先度の高いタスクが実行され、現在のスレッドがそこで一時停止されるように呼び出すので、多くの方法があります。onCreate()、onPause()のように、あなたはそれを理解することができます。

関連する問題