AndroidのServiceとThreadの違いを深く分析する


Serviceはプロセスでもスレッドでもありません。それらの関係は以下の通りです。

長い時間をかけて操作すれば、Threadも完成できると友達が聞きました。そうです。プログラムの中で時間がかかります。私達もThreadで完成できます。Serviceが必要です。以下のServiceとThreadの違いを説明します。
まず、プロセスはシステムの最小リソース割り当て単位であり、スレッドは最小の実行単位であり、スレッドが必要なリソースはそのプロセスを通じて取得される。
ServiceとThreadの違い:
Thread:Threadはプログラム実行の最小単位であり、Threadで非同期の操作ができます。
Service:Serviceはandroidの仕組みであり、それが実行されるときにLocal Serviceであれば、対応するServiceはメインプロセスのMainスレッド上で実行される。Remote Serviceであれば、対応するServiceは独立したプロセスのmainスレッド上で実行されます。
Threadの運行は独立しています。つまりActivityがfinishされた後、自主的にThreadまたはThreadのrun方法を停止していないと、Threadもずっと実行されます。そこで、Activityがfinishされた後、Threadの引用を持たなくなり、つまりThreadを制御できなくなります。一方、同じThreadを異なるActivityで制御することはできません。
例えば、Threadがサーバ検証データを時間ごとに接続する必要がある場合、Threadはバックグラウンドでずっと実行する必要があります。この時、Threadを作成したActivityが終了し、Threadが停止されていないと、このThreadを制御できなくなります。この場合、Serviceを作成して起動し、Serviceで作成し、実行し、このThreadを制御すれば、この問題は解決されます。(どのActivityでも同じServiceを制御できます。システムもServiceに対応するインスタンスを作成するだけです。)。
したがって、Serviceをメッセージサービスとして想像することができます。Contact.startService、Conttext.stopService、Contact.bindService、Contact.unbindServiceを任意の場所で呼び出すことができます。ServiceにBroadcastReceviceを登録することもできます。
Android初心者の多くは、ServiceとThreadの関係は何ですか?いつServiceを使うべきですか?いつThreadを使うべきですか?答えはちょっとびっくりするかもしれません。ServiceとThreadの間には何の関係もないからです。
多くの人がそれらを結びつけるのは、サービスのバックグラウンド概念によるものです。Threadはみんな知っています。サブスレッドを開いて、ここでいくつかの時間をかけて操作するとメインスレッドの運行が滞りません。Serviceは私たちが最初に理解した時、いつもそれがいくつかのバックグラウンドの任務を処理するのだと感じて、いくつかの比較的に時間がかかる操作もここに置いて運行することができて、これは人を混乱させました。しかし、Serviceが実際にメインスレッドで実行されているということを教えたら、Threadと何の関係があると思いますか?この残酷な事実を見てみましょう。
MainActivityのonCreate()メソッドに現在のスレッドIDを印刷する文を1行追加します。

Log.d("MyService", "MainActivity thread id is " + Thread.currentThread().getId()); 
そしてMyServiceのonCreate()方法にも現在のスレッドIDを印刷する文章を1行加えます。

 Log.d("MyService", "MyService thread id is " + Thread.currentThread().getId()); 
プログラムを再起動し、スタートServiceボタンをクリックすると、次のようなログが表示されます。

これらのスレッドIDは完全に同じであることが確認され、Serviceがメインスレッド内で実行されていることが確認されました。つまり、Serviceで非常に時間がかかるコードを作成すれば、プログラムには必ずANRが現れます。
びっくりするかもしれません。これはお父さんじゃないですか?Serviceにしたいですが、何の役に立つでしょうか?実はみんなは楽屋と子スレッドを結び付けないでください。これは全く違った概念です。Androidのバックグラウンドとは、UIに全く依存しない動作を指す。Activityが破壊されたり、プログラムが閉じられたりしても、まだプロセスがある限り、Serviceは継続して実行できます。例えば、いくつかのアプリケーションは、常にサーバーとの間でドキドキしながら接続する必要があります。Serviceを使って実現できます。また、前の方はServiceがメインスレッド内で実行されていることを確認したばかりではないですか?ここでずっと心拍接続をしていますが、メインスレッドの運行が滞りませんか?もちろんです。でも、Serviceでもう一つのサブスレッドを作成して、ここで時間のかかるロジックを処理すれば大丈夫です。
えっと、Serviceでもサブスレッドを作成するなら、なぜ直接Activityに作成しないですか?これはActivityがThreadを制御するのが難しいため、Activityが破壊された後に、以前に作成したサブスレッドの例を再取得する他の方法がないからです。また、Activityで作成されたサブスレッドは、他のActivityでは操作できません。しかし、Serviceは違っています。すべてのActivityはServiceに関連しています。そして、その中の方法を簡単に操作できます。たとえActivityが破壊されても、その後Serviceと関連付けを新たにすれば、元のServiceのBinderの実例を得ることができます。したがって、Serviceを使ってバックグラウンドのタスクを処理すると、Activityは安心してfinishができます。バックグラウンドのタスクをコントロールできないことを心配する必要はありません。
以上は、「Android」のServiceとThreadの違いを深く分析してくれた小編の内容です。皆さんの助けになりたいです。よろしくお願いします。