Как сделать так, чтобы приложение для Android всегда работало в фоновом режиме?

28

Я использую устройство Android. Когда я открываю "Настройки"> "Приложения"> "Выполнение", в верхнем левом углу экрана появляется опция: (1) Запуск процессов (2) Кэширование фоновых процессов. А приложения, которые я хотел запускать всегда (24 × 7), к сожалению, перечислены в (2) Кэшированные фоновые процессы, которые я хотел, чтобы они/они были перечислены в (1) Запуск процессов (если это возможно)). Это можно сделать? Или вкратце, как сделать приложение для Android, чтобы оно всегда работало в фоновом режиме?

Я надеюсь, что передал вопрос :-)

  • 0
    Вы можете попробовать создать сервис. Вот официальная документация для этого: Ссылка
  • 0
    для новых API вы можете использовать этот трюк;): stackoverflow.com/a/49878237/2201814
Теги:

4 ответа

32
Лучший ответ

Вы должны запустить службу в своем классе Application, чтобы запустить ее всегда. Если вы это сделаете, ваш сервис будет всегда работать. Даже если пользователь завершит работу вашего приложения из диспетчера задач или принудительно остановит ваше приложение, оно снова запустится.

Создать сервис:

public class YourService extends Service {

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // do your jobs here
        return super.onStartCommand(intent, flags, startId);
    }
}

Создайте класс Application и запустите свой сервис:

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        startService(new Intent(this, YourService.class));
    }
}

Не забудьте добавить это в тег "application" вашего AndroidManifest.xml

android:name=".App"

ОБНОВИТЬ

После Android Oreo Google ввел некоторые фоновые ограничения. Следовательно, это решение выше не будет работать, вероятно. Когда пользователь убивает ваше приложение из диспетчера задач, система Android также уничтожает ваш сервис. Если вы хотите запустить службу, которая всегда работает в фоновом режиме. Вы должны запустить службу переднего плана с отображением текущего уведомления. Итак, отредактируйте свой сервис, как показано ниже.

public class YourService extends Service {

    private static final int NOTIF_ID = 1;
    private static final String NOTIF_CHANNEL_ID = "Channel_Id";

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // do your jobs here

        startForeground()

        return super.onStartCommand(intent, flags, startId);
    }

    private void startForeground() {
        Intent notificationIntent = new Intent(this, MainActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        startForeground(NOTIF_ID, new NotificationCompat.Builder(this, 
                NOTIF_CHANNEL_ID) // don't forget create a notification channel first
                .setOngoing(true)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(getString(R.string.app_name))
                .setContentText("Service is running background")
                .setContentIntent(pendingIntent)
                .build());
    }
}
  • 0
    Спасибо. Но как создать сервис? Есть ли подходящее приложение для этого? Извините, bcoz Я только начинающий. Можете ли вы предоставить пошаговое руководство с самого начала?
  • 2
    Щелкните правой кнопкой мыши на приложении из проводника проекта (слева в Android Studio). А потом, Новый >> Сервис >> Сервис
Показать ещё 11 комментариев
1

Вы можете попробовать создать сервис. Вот официальная документация для этого: Ссылка

0

На некоторых мобильных телефонах, таких как my (MIUI Redmi 3), вы можете просто добавить конкретное приложение в список, где приложение не останавливается, когда вы завершаете приложения в диспетчере задач (он остановится, но он начнется снова).

Просто зайдите в "Настройки" > "РазрешенияAutostart"

  • 0
    Да ты прав. В некоторых телефонах, таких как Mi и Vivo, мы должны изменить настройки и дать приложению специальное разрешение на запуск в фоновом режиме из приложения настроек. Даже если вы создали службу, которая автоматически перезапускается при закрытии приложения, она не будет работать до тех пор, пока вы не установите разрешения в приложении настроек вашего телефона.
  • 0
    Могу ли я запросить это разрешение у моего приложения или мне придется попросить пользователя вручную перейти и изменить настройки?
-3

Ну... Пользователь с другой стороны. Как обеспечить, чтобы данное приложение НИКОГДА не работало в фоновом режиме и всегда убивалось после того, как оно перестало быть на переднем плане? У меня более 400 приложений, каждое из которых пытается работать в фоновом режиме, потребляет драгоценную память, загружает и загружает неизвестные данные, нагревает мой процессор и разряжает батарею. На самом деле, может быть, есть 20 приложений, которые мне действительно нужно запускать в фоновом режиме (телефон, сервисы Google, Gmail, zygote, дома, некоторые приложения для автоматизации). Другими словами: подумайте дважды, действительно ли вам нужно, чтобы приложение всегда работало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню