Перезапустите службу, даже если приложение отключено и продолжает работать в фоновом режиме даже после закрытия приложения How?

Я пытаюсь запустить службу в фоновом режиме. То, что делает мое приложение, – это когда пользователь проверяет флажок, а затем запускается сервис, и когда он отключен, служба остановлена. Что работает отлично. Но проблема в том, что когда я закрыл приложение из диспетчера задач, он также останавливает службу. Я хочу, чтобы служба работала даже после того, как она находится рядом с диспетчером задач. Тогда единственный способ остановить эту услугу – сам пользователь, сняв коробку.

Как я могу это достичь?

Вот мой код

Моя основная деятельность

public class SampleServiceActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final CheckBox cb = (CheckBox) findViewById(R.id.checkBox1); cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_LONG).show(); startService(new Intent(getBaseContext(), MyService.class)); } else { Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_LONG).show(); stopService(new Intent(getBaseContext(), MyService.class)); } } }); } } 

Мой class обслуживания

 public class MyService extends Service { Notify n = new Notify(); @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); n.initNotification(getBaseContext(), true); return START_STICKY; } //method to stop service public void onDestroy() { super.onDestroy(); n.cancelNotification(getBaseContext()); Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show(); } } 

Обновить

Как мы можем сделать эту услугу так, чтобы она работала как сервис gtalk?

Я не уверен, какой «Диспетчер задач» вы называете разными, будет действовать по-другому, поэтому я основываю свой ответ на действии, когда пользователь переходит в «Настройки» -> «Управление приложениями» и -> «Сила» останавливает приложение таким образом Андроид дал ему.

Предполагая, что ваша служба запущена как часть процесса, и если пользователь принудительно останавливает ваш процесс, вам не разрешается когда-либо запускать службу снова, пока пользователь не запускает вас вручную. Это особенно актуально с версии 3.0 и выше (проверьте для себя ). Это также кажется логичным, если вы думаете, что есть приложение, которое постоянно запускает сервис и каким-то образом раздражает пользователя. Поэтому, когда пользователь заказывает удары (:) force-stops) в приложении, он не должен перезапускать службу, чтобы продолжить прослушивание пользователя.

Например, представьте, что произойдет, если вы сможете создавать приложения, которые просто ели в процессорное время, удерживая блокировку слежения, и вы не можете их убить. Это было бы ужасно и огромной катастрофой безопасности.

Таким образом, вы не сможете перезапустить службу любыми способами, пока пользователь не запустит одно из ваших действий.

Также вы не можете отключить кнопку AFAIK. Вы должны придерживаться точки зрения, что ничто на устройстве не является вашим, кроме вашего приложения, и (в ограниченной степени) ресурсами, которым вам предоставлен доступ.

В любом случае, даже приложение gtalk будет склоняться к вашей воле, если вы захотите принудительно остановить. Он начнется только при использовании Gtalk или других приложений, которые используют службу gtalk, такую ​​как PUSH Gmail (для телефонов, где gtalk не является частью прошивки). Также взгляните на Android C2DM здесь:

https://stackoverflow.com/a/11238779/1218762

Но проблема в том, что когда я закрыл приложение из диспетчера задач, он также останавливает службу.

Верный.

Я хочу, чтобы служба работала даже после того, как она находится рядом с диспетчером задач. Тогда единственный способ остановить эту услугу – сам пользователь, сняв коробку.

Вы можете реализовать свою службу на C / C ++, встроить ее в какую-то специальную прошивку и убедить людей установить эту прошивку на своих устройствах.

Когда мы устанавливаем gtalk и как только мы входим в систему, он не появляется на вкладке активных приложений в диспетчере задач. Но он работает в фоновом режиме.

Это часть прошивки.

Я думаю, эта ссылка вам поможет.
Отключить кнопку остановки усилия в управлении приложением

Его отключить кнопку «Стоп» в настройке установщика пакетов, чтобы никто не мог остановить ваше приложение.

Вы не можете предотвратить убийство вашего сервиса при любых обстоятельствах. Однако вы можете попросить систему перезагрузить его. Есть два случая: (1) процесс умирает по какой-то ненормальной причине (2) перезагрузка телефона. В первом случае START_STICKY или START_REDELIVER_INTENT используются для перезапуска службы. В последнем случае вам нужно добавить BroadcastReceiver для android.intent.action.BOOT_COMPLETED.

Ваш код возвращает START_STICKY из onStartCommand, поэтому вы выбрали один из путей перезапуска службы: «если процесс этой службы убит во время ее запуска (после возврата из onStartCommand (Intent, int, int)), оставьте его в началось состояние, но не сохранит это поставленное намерение. Позже система попытается воссоздать сервис … »

«Этот режим имеет смысл для вещей, которые будут явно запущены и остановлены для запуска в течение произвольных периодов времени, таких как служба, выполняющая воспроизведение фоновой музыки».

Вы также можете использовать START_REDELIVER_INTENT.

Обратите внимание, что если ваша служба выполняет какую-либо значительную работу, ее необходимо запустить в фоновом streamе.

http://developer.android.com/reference/android/app/Service.html#START_STICKY

Я не совсем уверен, что вы можете запретить закрывать приложение TaskManager. Если вы думаете об этом, это имеет смысл для этого. Представьте, что у вас есть приложение, которое не отвечает на ввод пользователя, а также не отвечает на то, что его убил диспетчер задач. Нехорошо. Однако я нашел этот вопрос, похожий на ваш. Также вы можете заставить систему автоматически перезапустить службу, как описано здесь (немного прокрутите страницу вниз до «начала службы»,

Пусть ваша Service запускается в отдельном процессе. В этом блоге есть хороший учебник.

Вы можете указать атрибут android:process в чтобы ваше приложение выполнялось в рамках собственного процесса.

   

используйте мой метод, если вы хотите запустить скрытое приложение только в первый раз, я делаю прозрачную деятельность Launcher, как это

       

Поэтому я делаю приложение скрытым в пусковом устройстве, помещая этот код в oncreat () [Code]

 PackageManager p = getPackageManager(); ComponentName componentName = new ComponentName(this, MainActivity.class); // activity which is first time open in manifiest file which is declare as  p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

Поэтому я использую этот код для значка show app на панели запуска и заставляю его работать в classе обслуживания, который использует загрузку широковещательного приемника и в широковещательном широковещательном classе сетевого соединения (autostart.java и networkConnectinCheck.java):

 PackageManager p = context.getPackageManager(); ComponentName componentName = new ComponentName(context, MainActivity.class); p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 

Теперь я могу запускать приложение в первый раз armми пользователя, и после этого я использую приложение моего приемника для обеда в любое время.

Вы можете попробовать перезапустить службу на событии onDestroy. Используйте несколько флагов, чтобы найти, закрыт ли Пользователь пользователем или его сила закрыта.

Обратите внимание, что нет гарантии, что onDestroy будет вызываться каждый раз.

  • Время ожидания экрана Android
  • Как включить JAR-зависимость в библиотеку AAR
  • java.io.IOException: обнаружено не было
  • Где найти исходный код Java JDK?
  • когда статическая переменная загружается в java, время выполнения или время компиляции?
  • ISO 8601 Объект String to Date / Time в Android
  • В чем разница между compare () и compareTo ()?
  • Что означает Java-вариант -Xmx?
  • Как вернуть логическое значение из AsyncTask?
  • Ошибка Java. Фактические и формальные списки аргументов различаются по длине
  • Служба Android должна запускаться всегда (никогда не останавливать или останавливать)
  • Interesting Posts

    Преобразование из java.util.date в JodaTime

    Не удалось получить стабильное соединение firefox за 60 секунд (127.0.0.1:7055)

    Каков наилучший метод для принудительного истечения кеша в ASP.NET?

    Использование jQuery для AJAX с веб-формами ASP.NET

    Windows 7 меняет имя моей учетной записи … кроме этого нет. Как я ДЕЙСТВИТЕЛЬНО изменяю имя моей учетной записи?

    Как вы получаете Range для возвращения своего имени?

    Общая ширина элемента (включая заполнение и границу) в jQuery

    Приложения на основе Eclipse производят мышь и звуковые задержки в Windows 7

    В чем разница между ошибкой сегментации и переполнением стека?

    Android Studio: адаптируемая папка: как разместить изображения для нескольких точек на дюйм?

    jQuery: keyPress Backspace не срабатывает?

    Java: Почему мне требуется инициализировать примитивную локальную переменную?

    Как изменить разрешение экрана из командной строки в Windows 10?

    Вырезать UIImage в круг

    Где в реестре хранит Windows, с какой программой открывается определенные типы файлов?

    Давайте будем гением компьютера.