🔏
AppSec & Pentest
Mobile
Mobile
  • Mobile
  • Pentesting Methodology
  • Programming
    • Аналитика
      • Some Papers
      • Примеры токенов/ключей и тп
      • Twitter ads
      • Branch.IO
      • Adjust
      • Amplitude Analytics
      • Paypal for Business
      • Emarsys
      • MobileAppTracker
      • AppsFlyer
        • About
        • Настройка аккаунта
        • Исследование кода
        • Examples
      • Fabric
      • Mixpanel Analytics
      • Facebook ads
      • Yandex
      • Firebase SDK
        • Intro
        • Примеры
        • Firebase Cloud Messaging
        • Компоненты
          • Firebase
          • FirebaseABTesting
          • FirebaseAnalytics[Interop]
          • FirebaseAppDistribution
          • FirebaseAuth[Interop]
          • FirebaseCore
          • FirebaseCoreDiagnostics[Interop]
          • FirebaseCrashlytics
          • FirebaseDatabase
          • FirebaseDynamicLinks
          • FirebaseFirestore[Swift]
          • FirebaseFunctions
          • FirebaseInAppMessaging
          • FirebaseInstallations
          • FirebaseInstanceID
          • FirebaseMessaging
          • FirebaseRemoteConfig
          • FirebaseStorage[Swift]
          • GoogleDataTransport
          • GoogleDataTransportCCTSupport
          • GoogleUtilities
          • GoogleUtilitiesComponents
      • Crashlytics
      • GTM: Google Tag Manager
      • Google Maps
      • Google Analytics
      • Flurry
      • HockeyApp
    • iOS
      • Материалы
      • iOS: SSL Pinning
      • ЯП
        • Swift
          • VIPER (Architecture)
          • Общее
          • UI
          • Производительность
          • Swift Style Guide
        • Swift Security
          • Примеры уязвимостей
      • Frameworks and Libraries
        • [Pentest] App extensions
          • About
          • Extension types
          • Static Analys
          • Dynamic Analys
        • [Pentest] App Notifications
        • Async
        • СDP
        • Core
        • Cryptography
        • Jailbreak Detection
        • Network
          • AFNetworking
          • Alamofire
          • HTTP Requests
        • Other
        • Push
        • RxSwift
        • Store Data
        • UI
          • SwiftUI
          • WebView in iOS App
          • UI
        • VPN Detection
      • XCode
        • Build Project
        • Build Project via Command Line
        • Install IPA
        • Templates
      • Другие инструменты
        • mint
      • Системы зависимостей пакетов
        • Carthage
        • CocoaPods
      • Troubleshooting
    • Android
      • Архитектура Android приложения
        • Архитектура Kotlin-приложения
        • Разница между Android Library, Android APP и Java Library
        • Basic
          • Activities
          • Broadcast Receivers
          • Content Providers
          • Custom URL Schemes
          • Intents
          • Notifications
          • PendingIntents
          • Permissions
          • Services
          • Android WebView
      • ЯП
        • Java
          • Bundle
        • Kotlin
          • Возвращение объектов в Intent
          • Call Native Functions
      • Frameworks
        • AndroidX
        • LiveData
        • Lifecycle
        • Background Tasks
          • DownloadManager
          • AlarmManager
          • Foreground Services (или просто Services)
          • WorkManager
        • Room
        • Data binding
          • Basic
        • NDK
          • Install and Build
          • OpenSSL
          • libgit2 build
        • Navigation
        • Работа с изображениями
          • Glide
        • Video/Audio
          • Communications
            • Jitsi
        • JS Engines
          • FB: Hermes
          • Duktape
        • DI: Dependency Injection
          • Зачем?
          • koin
          • kodein
          • dagger2
        • Retrofit / OkHTTP
          • Intro
          • Example Usage
            • Parse error body
            • Примеры обработчиков запросов
            • Структура модуля
            • HttpApi
            • ControllerApi
          • SSLPinning
        • Google Play Authorization
      • Automating build (android in docker)
      • Android Studio
        • Build Project
        • Составные части проекта
      • Технологии
        • LeakCanary
        • Mocking
        • Настройка резервного копирования
        • Remote Method Invocation
        • bundletool (aab -> apk)
      • Примеры приложений
        • Kotlin
      • API levels & NDK Version
    • PWA
    • Hybrid App
      • Frameworks
        • Frameworks List
        • Electron
        • React Native
      • Google Web Toolkit
      • Dart/Flutter
      • Kotlin
      • Game Develope
    • Рекомендации
      • Хранение PIN-кода и шифрование информации
      • Разработка приложения для людей с ограниченными возможностями
      • Secure Networking on iOS
    • AirWatch MDM
    • Дистрибьюция
      • AppCenter
      • App Store
      • App Store Connect
      • AppTester
      • Crashlytics
      • Cydia
      • Diawi
      • Google Play
      • Hockey App
      • TestFairy
      • TestFlight
      • Transporter.app
      • Firebase AppDistribution
  • Forensic
    • Bluetooth
    • NFC
    • GSM
    • SIM-cards
    • iOS
      • Инструменты и скрипты
        • Забор скриншотов с телефона
        • otool
        • lipo
        • plist reader
        • backup reader
        • libimobiledevice
        • Cydia Impactor
        • App Signature
      • Архитектура ОС
        • Шифрование приложений
        • Архитектура iOS приложения
        • iBoot
        • Secure Enclave (SEP)
        • Браузеры
      • Файловая система
        • Где что хранится
        • Мониторинг файловой системы
      • Create/Decrypt Backup
      • IPA dump
        • Frida IPA dump
        • iOS 11 и выше
        • Младше iOS 10
      • Jailbreak
      • DFU режим (режим восстановления и обновления)
    • Android
      • Файловая система
        • Android KeyStore
      • Общая информация о системе: Полезные тулзы и команды
      • Проверить подписи apk
      • Создание и восстановление резервной копии
      • Память процессов
      • Root
        • Common
        • A/B-разделы
        • Su
        • TWRP
  • Pentest
    • Уязвимости и Атаки
      • Изи баги
      • Common
      • iOS
      • Android
      • AppLinks
      • Auth
        • Biometrics bypass
        • PIN Bruteforce
        • Типичные ошибки реализации SMS-аутентификации
      • USSD Attack
      • Java Object Deserialization
      • Lack of binary protection (anti-debugging) controls
      • Disabled security features in binary libraries
      • Lack of exploit mitigations (e.g. PIE, ARC, or stack canaries)
      • Path disclosure in the binary
      • Runtime hacking exploits (e.g. exploits that are only possible in a jailbroken environment)
      • Snapshot/pasteboard leakage
      • User data stored unencrypted in the file system and/or external storage
      • Android Task Hijacking
      • WebView
        • Check list
        • Example Web View XSS in iOS app
        • CVE-2020-6506: uXSS in Android WebView
    • Кейсы
      • Общие
        • Firebase
        • Про сниффинг трафика HTTP2/gRPC
        • Dump memory
      • Android
        • Simple Library RCE for Android
        • Закинуть GApps на эмулятор
        • Android Dependency Check
        • Запрет скриншота и детект оверлея
        • Disable/Delete any app w/o root
      • iOS
        • App Transport Security
        • Info.plist
        • Смотреть логи
        • Установка IPA-образа на iOS без XCode, Cydia Impactor
        • Борьба со скриншотами
        • Блюринг изображений в менеджере окон
        • Установка неподписанных IPA
      • Hybrid Apps
        • Flutter SDK: RE/Capture Traffic
    • Bug Bounty
    • Настройка окружения
      • SASTs
      • Frida & Objection
      • Pentest WebView
      • iOS
        • Platform
        • Network
          • Запись траффика iOS
          • iOS SSL Unpinning
      • Android
        • Reverse Engineering
        • Platform
        • Network
          • Запись трафика Android
          • Android: SSL Unpinning
    • Mitigations
    • Books & Papers
    • Companies & People & Blogs
    • Инструменты и скрипты
      • Комбайны
      • Android
        • grep: Извлечение информации из APK
        • Более менее
        • Старая херня
          • Drozer
          • Разное
      • iOS
        • SAST
          • ipanema
          • iblessing
        • meetle
        • Static Analys with Frida
        • iFunBox
        • iOS Binary Analysis
        • needle
        • idb
        • ios emulator
        • passionfruit
        • Grapefruit ("NG passionfruit")
        • XPC Sniffing
        • SAST in MobSF
        • Поиск по файлам
      • hybrid app
        • Cordova
        • Xamarin
        • Electron
      • FBFlipper
      • truegaze
  • Reverse Engineering
    • Android
      • Tools
        • Decompilers
        • TODO: Androguard
        • TODO: AndroPyTool
        • TODO: LIEF-project
        • TODO: MobSF
        • JADX
        • dex2jar
        • Diff APKs, JARs,..
        • APKiD
        • enjarify
        • adb/fastboot
          • Install
          • Usage
          • Troubleshooting
          • На что можем влиять через adb (в поисках сервисов)
        • DexCalibur
      • Объединить несколько JAR
      • Build AOSP in Docker
      • Патчинг
      • Поиск уникальных строк в Smali
      • Защита от frida
    • iOS
      • CVEs
      • Tools
        • iRET
        • xcrun
        • otool: check binary encryption
      • Патчинг
      • Start iOS Debug Server
      • iOS Audio Framework
      • Facebook SDK
      • Swift
      • Attack Secure Boot of SEP
      • iOS Kernel Firmware
    • Tools
      • frida
        • Установка
        • Frida CLI
        • Запуск скриптов
        • Общие команды (JS API)
        • Frida Projects
        • Примеры
          • Материалы
          • Android
          • iOS
          • Unity/Mono
          • Общее
            • Вывод Callstack
            • Перехват инструкции по смещению
            • Перехват функции по имени
            • Перехват функции по смещению (sub_*)
      • objection
      • luject
      • emulators
    • Кейсы
      • Hybrid App
        • Intro
        • Hermes
        • Xamarin
        • React Native
        • Unity
        • Debug Hybrid App
    • Статьи
  • Administration
    • Инструменты
      • Android
        • uiautomatorviewer
        • jobb
        • archquery
        • apkanalyzer
        • avdmanager
        • emulator
        • perfetto
        • monkeyrunner
        • Настройка окружения
        • sdkmanager
Powered by GitBook
On this page
  • Intro
  • Типы служб
  • Запущенная
  • Привязанная
  • Важные методы
  • onStartCommand
  • onBind
  • onCreate
  • onDestroy
  • Нюансы, связанные с уничтожением
  • IntentService
  • onHandleIntent
  • Проблема с тем, что система убивает сервис

Was this helpful?

  1. Programming
  2. Android
  3. Frameworks
  4. Background Tasks

Foreground Services (или просто Services)

PreviousAlarmManagerNextWorkManager

Last updated 5 years ago

Was this helpful?

Intro

man (RU):

Для инициируемых задач. Такие сервисы не убиваются системой (потому что имеют высокий приоритет). Их работа будет отображаться в области уведомлений.

Служба выполняется в основном потоке. Поэтому надо создать новый поток в службе, если она выполняет интенсивные или блокирующие операции.

Типы служб

Фактически служба может принимать две формы:

Запущенная

Служба является «запущенной», когда компонент приложения (например, операция) запускает ее вызовом . После запуска служба может работать в фоновом режиме в течение неограниченного времени, даже если уничтожен компонент, который ее запустил. Обычно запущенная служба выполняет одну операцию и не возвращает результатов вызывающему компоненту. Например, она может загружать или выгружать файл по сети. Когда операция выполнена, служба должна остановиться самостоятельно.

Для обработки запросов - переопределить onStartCommand()

Привязанная

Служба является «привязанной», когда компонент приложения привязывается к ней вызовом . Привязанная служба предлагает интерфейс клиент-сервер, который позволяет компонентам взаимодействовать со службой, отправлять запросы, получать результаты и даже делать это между разными процессами посредством межпроцессного взаимодействия (IPC). Привязанная служба работает только пока к ней привязан другой компонент приложения. К службе могут быть привязаны несколько компонентов одновременно, но когда все они отменяют привязку, служба уничтожается.

Для обработки запросов - переопределить onBind()

Важные методы

onStartCommand

onBind

onCreate

onDestroy

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

Нюансы, связанные с уничтожением

IntentService

Очень важно: IntentService - это один сервис! Если поступают два запроса ему, то он их обрабатывает последовательно!

onHandleIntent

Нам надо переопределить только этот метод для обработки входяих интентов. Все остальное за нас уже сделано.

Проблема с тем, что система убивает сервис

Система вызывает этот метод, когда другой компонент, например, операция, запрашивает запуск этой службы, вызывая . После выполнения этого метода служба запускается и может в течение неограниченного времени работать в фоновом режиме. Если вы реализуете такой метод, вы обязаны остановить службу посредством вызова или . (Если требуется только обеспечить привязку, реализовывать этот метод не обязательно).

Система вызывает этот метод, когда другой компонент хочет выполнить привязку к службе (например, для выполнения удаленного вызова процедуры) путем вызова . В вашей реализации этого метода вы должны обеспечить интерфейс, который клиенты используют для взаимодействия со службой, возвращая . Всегда необходимо реализовывать этот метод, но если вы не хотите разрешать привязку, необходимо возвращать значение null.

Система вызывает этот метод при первом создании службы для выполнения однократных процедур настройки (перед вызовом или ). Если служба уже запущена, этот метод не вызывается.

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

Если компонент вызывает для создания службы (и не вызывается), то служба работает, пока к ней привязан компонент. Как только выполняется отмена привязки службы ко всем клиентам, система уничтожает службу.

Система Android будет принудительно останавливать службу только в том случае, когда не хватает памяти, и необходимо восстановить системные для операции, которая отображается на переднем плане. Если служба привязана к операции, которая отображается на переднем плане, менее вероятно, что она будет уничтожена, и если служба объявлена для (как обсуждалось выше), она почти никогда не будет уничтожаться. В противном случае, если служба была запущена и является длительной, система со временем будет опускать ее положение в списке фоновых задач, и служба станет очень чувствительной к уничтожению — если ваша служба запущена, вы должны предусмотреть изящную обработку ее перезапуска системой. Если система уничтожает вашу службу, она перезапускает ее, как только снова появляется доступ к ресурсам (хотя это также зависит от значения, возвращаемого методом , как обсуждается ниже). Дополнительная информация о ситуациях, в которых система может уничтожить службу приведена в документе .

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

Это происходит из-за оптимизации работы батарии. Решения: запускать startForegroundService (для sdk 26 и младше) или отключать оптимизацию работы батареи для нашего приложения

https://developer.android.com/guide/components/services
startService()
bindService()
startService()
stopSelf()
stopService()
bindService()
IBinder
onStartCommand()
onBind()
startService()
onStartCommand()
stopSelf()
stopService()
bindService()
onStartCommand()
выполнения на переднем плане
onStartCommand()
Процессы и потоки
Service
onHandleIntent()
https://stackoverflow.com/questions/48166206/how-to-start-power-manager-of-all-android-manufactures-to-enable-background-and