サービス、非同期タスク、スレッドの違いは何ですか。私が間違っていなければ、それらのすべてがバックグラウンドでいくつかのことをするために使用されます。それで、どれをいつ使用するかをどのように決定するのですか?
サービス、非同期タスク、スレッドの違いは何ですか。私が間違っていなければ、それらのすべてがバックグラウンドでいくつかのことをするために使用されます。それで、どれをいつ使用するかをどのように決定するのですか?
回答:
おそらくあなたはすでにそれらについてのドキュメントの説明を読んでいるので、私はそれらを繰り返すことはしませんが、代わりに私は自分の言葉で答えを出そうとします。
サービスはアクティビティに似ていますが、ユーザーインターフェイスはありません。たとえば天気を取得したい場合は、空のアクティビティを作成しないので、サービスを使用します。
スレッドはスレッドです。おそらく他の部分からすでに知っています。スレッドからUIを更新できないことを知っておく必要があります。これにはハンドラを使用する必要がありますが、さらに読んでください。
AsyncTaskは、使用することをお勧めするインテリジェントなスレッドです。それはそのメソッドを支援できるのでインテリジェントであり、UIスレッドで実行される3つのメソッドがあり、UIコンポーネントを更新するのに適しています。
Services、AsyncTasksを頻繁に使用しています。AsyncTaskでほとんどすべてを実行できるため、スレッドを少なくするか、まったくしないようにします。
これはあなたの質問に対する最も簡単な答えです
糸
メインスレッドと「並列」で実行される実行の単位は重要なポイントです。メインスレッド以外の任意のスレッドからUIコンポーネントを更新することはできません。
AsyncTask
特別なスレッドで、UIを更新するヘルパーメソッドを提供します。そのため、AsyncTaskがバックグラウンドスレッドで実行される場合でも、基本的にUIを更新できます。プロセス間通信の処理は明示的に行う必要はありません。
サービス
上記の問題を解決するのは、それを呼び出すアクティビティとは別に存在するため、アクティビティが破棄されても実行を継続できるため、メインスレッドで実行されます(ANRに注意)バックグラウンドサービスを使用します(IntentServiceを拡張して、ワーカースレッドを自動的に作成します)あなたのために)。サービスはUIのないアクティビティのようなもので、長いタスクに適しています
誰かが数日前に私に言っていたと思う情報はほとんどありません。
私の使用例は次のとおりです。サーバーに接続されているグローバルスペースに1つのスレッドと、結果を表示するアクティビティがあります。ユーザーがホームボタンを押すと、アクティビティがバックグラウンドになり、新しいサービスが開始されます。次に、このサービスはスレッドから結果を読み取り、必要に応じて通知領域に情報を表示します。OSがアクティビティを破壊する心配はありません。サービスが実行されている限り、スレッドが破壊されることはわかっているからです。
開発者の観点から:
スレッド:メインスレッドと並行してコードセットを実行するために使用されます。ただし、スレッド内でUIを処理することはできません。そのためには、を使用する必要がありますHandler
。Hadlerはスレッドのように機能しますが、UIも処理できます。
ASyncTask:メインスレッドで動作させることができないタスクを処理するために使用されます。たとえば、HTTPリクエストはメインスレッドで処理できない非常に重い作業であるためASyncTask
、バックグラウンドで非同期にメインスレッドと並行して動作します。対応する上で呼び出されるコールバックメソッドはほとんどありません。イベント。
サービス:バックグラウンドプロセスです。これは、UIが関連付けられていない処理を行う必要がある場合に使用されます。
Service
を使用しない限り、バックグラウンドで実行する必要はありませんIntentService
。UiThread Service
からスタンダートを開始した場合は、UiThreadで実行されます。
Service
はありません。デフォルトでは別のプロセスでは実行されず、他のコンポーネントを使用するアプリプロセスで実行されるためです。Service
それが内部に存在するスレッドのバックグラウンドで実行されると言う方が良いでしょう。