Создание фоновой службы на Android

В моем проекте мне нужно создать службу в android. Я могу зарегистрировать услугу следующим образом:

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <service android:enabled="true" android:name=".ServiceTemplate"/> <activity android:name=".SampleServiceActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Я вызываю эту службу внутри действия, как показано ниже:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent service = new Intent(getApplicationContext(), ServiceTemplate.class); this.startService(service); } 

Но если я убью текущую деятельность, служба также будет уничтожена. Мне нужна эта служба, всегда работающая в фоновом режиме. Что мне нужно сделать? Как зарегистрировать услугу? Как начать сервис?

Вот полу-отличный способ сохранить обслуживание навсегда. Есть способы убить его в коде, если вы пожелаете

Справочная служба:

 package com.ex.ample; import android.app.Service; import android.content.*; import android.os.*; import android.widget.Toast; public class BackgroundService extends Service { public Context context = this; public Handler handler = null; public static Runnable runnable = null; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "Service created!", Toast.LENGTH_LONG).show(); handler = new Handler(); runnable = new Runnable() { public void run() { Toast.makeText(context, "Service is still running", Toast.LENGTH_LONG).show(); handler.postDelayed(runnable, 10000); } }; handler.postDelayed(runnable, 15000); } @Override public void onDestroy() { /* IF YOU WANT THIS SERVICE KILLED WITH THE APP THEN UNCOMMENT THE FOLLOWING LINE */ //handler.removeCallbacks(runnable); Toast.makeText(this, "Service stopped", Toast.LENGTH_LONG).show(); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "Service started by user.", Toast.LENGTH_LONG).show(); } } 

Вот как вы начинаете его со своей основной деятельности или где хотите:

 startService(new Intent(this, BackgroundService.class)); 

onDestroy() будет вызван, когда приложение будет закрыто или убито, но runnable просто запустит его обратно. Вам также нужно удалить обратные вызовы обработчика.

Надеюсь, это поможет кому-то.

Причина, по которой некоторые люди делают это, – это корпоративные приложения, где в некоторых случаях пользователи / сотрудники не могут останавливать определенные вещи 🙂

http://i.imgur.com/1vCnYJW.png

Но если я убью текущую деятельность, служба также убивает. Мне нужна эта служба, всегда работающая в фоновом режиме. Что мне нужно сделать?

Если «убить текущую активность» означает, что вы используете убийцу задачи или Force Stop из приложения «Настройки», ваша служба будет остановлена. Вы ничего не можете с этим поделать. Пользователь указал, что они не хотят, чтобы ваше приложение запускалось больше; Пожалуйста, соблюдайте пожелания пользователя.

Если «убить текущую деятельность» означает, что вы нажали BACK или HOME или что-то еще, служба должна продолжать работать, по крайней мере, на некоторое время, если вы не назовете stopService() . Он не будет работать навсегда – Android в конечном итоге избавится от службы, потому что слишком много разработчиков пишут службы, которые пытаются «всегда работать в фоновом режиме». А также. Конечно, пользователь может убить службу, когда пользователь захочет.

Служба должна быть только «запущена», когда она активно доставляет ценность пользователю . Обычно это означает, что служба не должна «всегда работать в фоновом режиме». Вместо этого используйте AlarmManager и IntentService для выполнения работы на периодической основе.

Попробуйте запустить службу в отдельном потоке, так что, когда вы уничтожите свою деятельность, услуга не будет затронута. Он будет работать без перерывов. Кроме того, в службе возвратите Service.START_STICKY из onStartCommand(intent, flags, startId) чтобы убедиться, что служба воссоздана, если она была убита системой (ОС Android).

Переопределить этот метод:

 public int onStartCommand(Intent intent, int flags, int startId) { return Service.START_STICKY; }