在单独的进程android中启动一个服务

我想在一个单独的过程中启动一个服务(例如,当我在设置中去我的应用程序pipe理器,然后去运行服务,它应该显示我的服务在一个单独的过程)。

我的Android Manifest如下所示:

<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启动服务,所以当我杀了应用程序服务closures以及。 谁能告诉我如何开始作为一个不同的过程服务。

Solutions Collecting From Web of "在单独的进程android中启动一个服务"

AndroidManifest.xml检查serviceprocess属性。 您需要更改您的android:process值以开头:

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

相关部分:

如果分配给该属性的名称以冒号(':')开始,则在需要时会创build一个专用于应用程序的新进程,并在该进程中运行该服务。 如果进程名称以小写字母开头,则该服务将以该名称的全局进程运行,前提是它有权这样做。 这允许不同应用程序中的组件共享一个进程,从而减less资源使用。

提供的其他答案并不真正回答如何在单独的过程中启动服务的问题。


定义一个服务的过程

android:process字段定义了要运行服务的进程的名称。 通常,应用程序的所有组件都在为应用程序创build的默认进程中运行。 但是,组件可以使用自己的进程属性覆盖缺省值,从而允许将应用程序分布在多个进程中。

如果分配给该属性的名称以冒号(':')开始,则服务将在其自己的单独进程中运行。

 <service android:name="com.example.appName" android:process=":externalProcess" /> 

如果进程名称以小写字母开头,则该服务将以该名称的全局进程运行,前提是它有权这样做。 这允许不同应用程序中的组件共享一个进程,从而减less资源使用。

在单独的进程上运行并不能解决您的问题。 我有同样的问题,这是一个正常的行为。 当你启动一个服务(不是前台服务)时,即使它在一个单独的进程中,操作系统也可以随时杀死它。 在你的情况下,如果closures活动/终止应用程序,操作系统通常closures服务,即使它们在单独的进程中。 你有两个select:

1-开始您的服务作为前台服务 。 在这种情况下,服务几乎不会在任何情况下closures。 请注意,前台服务是为特定应用程序而devise的,您将在通知中心和状态栏中发出粘性通知。

2-将您的服务作为启动服务(不是意向服务)。 然后在服务的onStartCommand上,返回START_STICKY。 这将告诉操作系统,如果由于某种原因需要closures服务,则在有足够资源时再次运行该服务。 在你的情况下,当用户closures活动/杀死应用程序时,服务进程将被终止,但通常会重新打开。