2012-02-26 17 views
14

私は、アクティビティとサービスで構成されるAndroidアプリを持っています。現在、それらは同じプロセス内に存在し、同じヒープを使用していますが、サービスのプロセス/ヒープを分けなければなりません。つまりサービスがアクティビティに完全に依存しないようにして、アクティビティがクラッシュした場合でもサービスに影響を与えないようにします。しかし、私は彼らが単一のアプリケーションとしてインストール可能であることを望んでいます。これは可能ですか?個別のプロセスを使用するAndroidアクティビティとサービスを作成する方法

答えて

22

確実に可能です。引用するAndroidManifest.xml

http://developer.android.com/guide/topics/manifest/service-element.html

serviceためprocess属性を参照してください:

サービスが実行されるプロセスの名前を。通常、アプリケーションのすべてのコンポーネントは、アプリケーション用に作成されたデフォルトのプロセスで実行されます。アプリケーションパッケージと同じ名前です。要素のprocess属性は、すべてのコンポーネントに対して異なるデフォルトを設定できます。しかし、コンポーネントは独自のプロセス属性でデフォルトを上書きできるため、アプリケーションを複数のプロセスに分散することができます。

この属性に割り当てられた名前がコロン( ':')で始まる場合、アプリケーションに必要な新しいプロセスが作成され、そのプロセスでサービスが実行されます。プロセス名が小文字で始まる場合、サービスはその名前のグローバルプロセスで実行されます。これにより、異なるアプリケーションのコンポーネントがプロセスを共有し、リソースの使用を削減できます。

+0

ニース。 @lyricsboyでも質問:OPのシナリオでは、Androidがアクティビティ(つまり、アプリ)を抹殺するときに、実行中のサービスが同じプロセスであればそれを殺してしまいますか? –

+0

サービスの開始方法(どのモード)とメモリに関連するその他の要因によって異なります。より詳細な情報はhttp://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – lyricsboy

+0

ありがとうございました – chris

5

サービスのIPCは、サービスが他のアプリケーションによって消費される必要がある場合にのみ必要です。

独自のプロセスでサービスを実行すると、サービスのガベージコレクタがアプリケーションに影響を与えず、単独で実行するとサービスのメモリフットプリントが少し小さくなるという小さな利点があります。

他のアプリケーションによるサービスの使用が必要ない場合は、ローカルサービスを使用することをお勧めします。また、独自のプロセスでサービスを実行し、アプリケーションとのさまざまな通信を使用することもできます(例:放送受信機を介して受信する。私はAndroidサービスのチュートリアルで以下のリンクの異なるアプローチを説明しようとしました:Activity and service communication

+0

は、(分離されたプロセスでのサービスではありません)アクティビティを呼び出すときにサービスが独自のonDestroyを呼び出さないようにする唯一の方法はありますか? – EsmaeelQash

+0

こんにちはVogella、私は "他のアプリケーションでサービスを消費する"とは言いませんが、私はこの言葉を得ていません。 thanks – SRam

+0

サービスを別のプロセスで実行すると、メインアプリケーションのプロセスが終了した場合でもサービスを継続できるようになります。これは非常に便利です。 – Luca

関連する問題