別のプロセスでサービスを開始したい(つまり、設定でアプリケーションマネージャーに移動してからサービスを実行すると、別のプロセスでサービスが表示されます)。
My Androidマニフェストは次のとおりです。
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.timerapp.MainActivity"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service Android:name="com.example.timerapp.WorkerThread"
Android:process="com.moizali"></service>
</application>
MainActivityでサービスを開始しているので、明らかにアプリケーションを強制終了すると、サービスもシャットダウンします。別のプロセスとしてサービスを開始する方法を教えてください。
AndroidManifest.xml
のprocess
のservice
属性を確認してください。 Android:process
で始まるように:
値を変更する必要があります。
http://developer.Android.com/guide/topics/manifest/service-element.html
関連セクション:
この属性に割り当てられた名前がコロン(「:」)で始まる場合、アプリケーション専用の新しいプロセスが必要に応じて作成され、そのプロセスでサービスが実行されます。プロセス名が小文字で始まる場合、サービスはその名前のグローバルプロセスで実行されますが、許可されている場合に限ります。これにより、さまざまなアプリケーションのコンポーネントがプロセスを共有できるようになり、リソースの使用量が削減されます。
提供される他の答えは、別のプロセスでサービスを開始する方法の質問には実際には答えません。
サービスのプロセスを定義する
Android:process
フィールドは、サービスを実行するプロセスの名前を定義します。通常、アプリケーションのすべてのコンポーネントは、そのアプリケーション用に作成されたデフォルトプロセスで実行されます。ただし、コンポーネントは独自のプロセス属性でデフォルトをオーバーライドできるため、アプリケーションを複数のプロセスに分散させることができます。
この属性に割り当てられた名前がコロン(「:」)で始まる場合、サービスは独自の個別のプロセスで実行されます。
<service
Android:name="com.example.appName"
Android:process=":externalProcess" />
プロセス名が小文字で始まる場合、サービスはその名前のグローバルプロセスで実行されますが、許可されている場合に限ります。これにより、さまざまなアプリケーションのコンポーネントがプロセスを共有できるようになり、リソースの使用量が削減されます。
別のプロセスで実行しても問題は解決しません。同じ問題が発生しましたが、これはAndroidの通常の動作です。 Service
(フォアグラウンドService
ではなく)を起動すると、たとえ別のプロセスにある場合でも、OSはいつでもそれを強制終了できます。あなたの場合、Activity
(s)を閉じる/ Application
を殺すと、OSは通常、それらが別々のプロセスにある場合でもサービスを閉じます。次の2つのオプションがあります。
1- Foreground Service
としてサービスを開始します。この場合、Service
はほとんどすべての条件により閉じられません。フォアグラウンドサービスは特定のアプリケーション向けに設計されており、通知センターとステータスバーにスティッキー通知が表示されることに注意してください。
2-サービスを開始サービス(IntentService
ではなく)として作成します。次に、サービスのonStartCommand
で、START_STICKY
。何らかの理由でService
を閉じる必要がある場合、十分なリソースがあるときにもう一度実行する必要がある場合、OSに通知します。あなたの場合、ユーザーがActivity
/killを閉じたときにApplication
がとにかくService
プロセスは強制終了されますが、通常は再び開きます。