0

Google I / O 2010を見たばかり-言われたAndroidRESTクライアントアプリケーション: サービスから長時間実行する操作を開始する そして私が理解しているように(私の英語は貧弱です)これの主な目的はアプリがシステムによって殺されるのを防ぐことです。右?サービスからのWeb操作だけでなく、すべての長時間実行操作を実行することをお勧めしますか?

アクティビティでオブジェクトを作成するとアプリプロセスが強制終了されると理解しているので、このオブジェクトは失われますが、サービスでこのオブジェクトを作成してプロセスが強制終了されると、オブジェクトは引き続き有効になります。右?

(個別のスレッド)VS(サービス+個別のスレッド)

私の質問の文脈では何が違うのですか?

4

2 に答える 2

2

ではない正確に ...

あなたはどういうわけか概念DestroyedKilled

破棄 これは、アプリケーションが対処できるように準備する必要があるものです。さまざまな理由(デバイスの向きの変更など)により、OSがアクティビティを破壊する可能性があり(通常はonDestroy()事前に呼び出すため、重要なものを保存する機会があります)、アクティビティ内のすべてのオブジェクトが失われます。ただし、アプリケーションに複数のアクティビティやサービスが含まれている可能性があり、1つのアクティビティが破棄されても、他のアクティビティも破棄されるわけではありません。

強制終了 OSは、何らかの理由でアプリケーションを強制終了することを決定する場合があります。これは、アプリケーションで使用されているプロセスを強制終了することによって行われます。このプロセスは、アプリケーションを構成するすべてのアクティビティとサービスを実行するプロセスです。アプリケーションには警告がなく、これを防ぐために何もすることはできません。アプリケーション内のすべてのオブジェクト(アクティビティおよびサービスによって使用される)は失われます。

そうは言っても、長期的な活動におけるの利点はService何ですか?

簡単な例を使用してみましょう:

アクティビティがサーバーに大きなファイルをアップロードしている途中で、ユーザーがデバイスの向きを変更することを決定した場合、アクティビティは破棄され、アップロードが中断されます。アクティビティの再開時にアップロードを再開しても、再開から開始されます。

アクティビティからの要求に応じてアップロードを実行するサービスがある場合、アクティビティが破棄されても、サービスはアクティブなままであり、アップロードは中断されることなく続行されます。

注: 非常に長時間実行されているサービス(30分以上実行される)がある場合は、それをフォアグロウンサービスとして作成します。そうでない場合は、とにかく強制終了されます。

于 2012-10-13T11:13:17.187 に答える
0

1.AndroidのServiceAPIは、アプリケーションがバックグラウンドで動作するための主要なメカニズムの1つです。

ただし、単純なスレッドを使用して簡単に実装できます。

ただし、 *アプリケーションがユーザーに表示されなくなると、通常は消耗品と見なされ、他の場所でメモリが必要になった場合にシステムによって強制終了される可能性があります。アプリケーションがこれを回避する主な方法は、サービスコンポーネントを開始することです。これは、システムに貴重な作業を行っていることを明示的に通知し、本当に必要がない場合はシステムがプロセスを強制終了しないことを希望します。*

私が理解しているように、それは私たちの場合の通常のスレッドとサービスの違いです。

于 2012-12-07T07:36:03.067 に答える