Я использую устройство Android. Когда я открываю "Настройки"> "Приложения"> "Выполнение", в верхнем левом углу экрана появляется опция: (1) Запуск процессов (2) Кэширование фоновых процессов. А приложения, которые я хотел запускать всегда (24 × 7), к сожалению, перечислены в (2) Кэшированные фоновые процессы, которые я хотел, чтобы они/они были перечислены в (1) Запуск процессов (если это возможно)). Это можно сделать? Или вкратце, как сделать приложение для Android, чтобы оно всегда работало в фоновом режиме?
Я надеюсь, что передал вопрос :-)
Вы должны запустить службу в своем классе 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());
}
}
Вы можете попробовать создать сервис. Вот официальная документация для этого: Ссылка
На некоторых мобильных телефонах, таких как my (MIUI Redmi 3), вы можете просто добавить конкретное приложение в список, где приложение не останавливается, когда вы завершаете приложения в диспетчере задач (он остановится, но он начнется снова).
Просто зайдите в "Настройки" > "РазрешенияAutostart"
Ну... Пользователь с другой стороны. Как обеспечить, чтобы данное приложение НИКОГДА не работало в фоновом режиме и всегда убивалось после того, как оно перестало быть на переднем плане? У меня более 400 приложений, каждое из которых пытается работать в фоновом режиме, потребляет драгоценную память, загружает и загружает неизвестные данные, нагревает мой процессор и разряжает батарею. На самом деле, может быть, есть 20 приложений, которые мне действительно нужно запускать в фоновом режиме (телефон, сервисы Google, Gmail, zygote, дома, некоторые приложения для автоматизации). Другими словами: подумайте дважды, действительно ли вам нужно, чтобы приложение всегда работало.