Я бы не стал использовать атрибут android: process - он фактически запускает ваш сервис в отдельном процессе и затрудняет такие вещи, как общие настройки.Вам не придется беспокоиться о том, что ваш сервис умирает, когда ваше приложение умирает, сервис будет продолжать работать (это точка сервиса).Вы также не хотите привязывать сервис, потому что он запустится и умрет, когда будут привязки.При этом:
<service
android:enabled="true"
android:exported="true"
android:name=".MyService"
android:label="@string/my_service_label"
android:description="@string/my_service_description"
<intent-filter>
<action android:name="com.package.name.START_SERVICE" />
</intent-filter>
</service>
Вы можете определить свое собственное действие для намерения запустить службу (не может быть запущено системой - должно быть действием).Мне нравится устанавливать для «enabled» значение true, чтобы система могла создавать экземпляры моего сервиса, и «экспортировать», чтобы другие приложения могли отправлять намерения и взаимодействовать с моим сервисом.Вы можете найти больше об этом здесь .
Вы также можете создать долгосрочную службу, которая использует привязки, если вы сделаете это, просто добавьте и назначьте привязку, такую как:
<action android:name="com.package.name.IRemoteConnection" />
Теперь, чтобы запустить службу из вашей деятельности:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent serviceIntent = new Intent("com.package.name.START_SERVICE");
this.startService(serviceIntent);
// You can finish your activity here or keep going...
}
}
Теперь для службы:
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// This is triggered by the binder action intent.
// You can return your binder here if you want...
return null;
}
@Override
public void onCreate() {
// Called when your service is first created.
}
@Override
public in onStartCommand(Intent intent, int flags, int startId) {
// This is triggered by the service action start intent
return super.onStartCommand(intent, flags, startId);
}
}
Теперь ваша служба должна работать.Чтобы помочь с долголетием, есть некоторые хитрости.Запустите его в качестве службы переднего плана (вы делаете это в службе) - это заставит вас создать значок уведомления, который будет вставлен в строку состояния.Также сохраняйте индикатор HEAP, чтобы снизить вероятность того, что ваше приложение будет убито Android.
Кроме того, служба убивается, когда вы убиваете DVM - например, если вы идете в «Настройки» -> «Приложения» и останавливаете приложение, которое выубивая DVM и, таким образом, убивая сервис.Если вы видите, что ваше приложение работает в настройках, это еще не значит, что действие выполняется.Деятельность и обслуживание имеют разные жизненные циклы, но могут совместно использовать DVM.Просто помните, что вам не нужно убивать свою активность, если она не нужна, просто позвольте Android справиться с этим.
Надеюсь, это поможет.