Как запустить приложение для Android в фоновом режиме? - PullRequest
26 голосов
/ 27 января 2012

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

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

public class AutoBoot extends BroadcastReceiver {
    @Override        
    public void onReceive(Context context, Intent intent) {                
        Intent i = new Intent(context, MyActivity.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);          
    }
}

У меня вопрос, как сделать так, чтобы этот код автозапуска выполнялся непрерывно даже после нажатия кнопки «Назад» или запуска других приложений?

Ответы [ 3 ]

17 голосов
/ 27 января 2012

Скорее всего, вы можете запустить Service здесь, если вы хотите, чтобы ваше приложение запускалось в фоновом режиме.Для этого и используются службы в Android - работа в фоновом режиме и выполнение длительных операций.

UDPATE

Вы можете использовать START_STICKYсделайте так, чтобы ваш Сервис работал непрерывно.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}
4 голосов
/ 22 апреля 2017

Как приложения работают в фоновом режиме в любом случае. Я предполагаю, что вы действительно спрашиваете, как вы заставляете приложения делать вещи в фоновом режиме. Приведенное ниже решение заставит ваше приложение работать в фоновом режиме после открытия приложения и после перезагрузки системы.

Ниже я добавил ссылку на полностью рабочий пример (в форме Android Studio Project)

Эта тема, по-видимому, выходит за рамки документации по Android, и, похоже, нет ни одного всеобъемлющего документа по этому вопросу. Информация распространяется в нескольких документах.

Следующие документы говорят вам косвенно, как это сделать: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

В целях обеспечения правильности ваших требований к использованию важная часть вышеприведенного документа, которую необходимо внимательно прочитать: #Binder, #Messenger и ссылка на компоненты ниже:

https://developer.android.com/guide/components/aidl.html

Вот ссылка на полностью рабочий пример (в формате Android Studio): http://developersfound.com/BackgroundServiceDemo.zip

Этот проект запустит Activity, которая привязывается к услуге; реализация AIDL.

Этот проект также полезен для пересчета в целях IPC в разных приложениях.

Этот проект также разработан для автоматического запуска при перезапуске Android (при условии, что приложение было запущено хотя бы один раз после установки и приложение не установлено на SD-карте)

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

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

Этот проект разработан в соответствии с вышеуказанными документами и впоследствии является чистым решением.

Однако есть часть этого проекта, которая не является чистой: я не нашел способа запустить службу при перезагрузке без использования Activity. Если у кого-нибудь из вас, читающих это сообщение, есть простой способ сделать это, пожалуйста, оставьте комментарий.

4 голосов
/ 27 января 2012

Начало действия не является правильным подходом для такого поведения.Вместо этого пусть ваш BroadcastReceiver использует намерение запустить Сервис, который может продолжать работать как можно дольше.(См. http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle)

См. Также Постоянный сервис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...