跳到正文
cccskills
免费在 GitHub 公开

service-lifecycle

Reference for Android VPN/proxy service lifecycle: runtime coordinators, status/telemetry flow, where to make changes. Use when touching service start/stop, handover, or coordinator code.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md5.1 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Service Lifecycle

Overview

The Android services are thin shells now. Real lifecycle behavior lives in runtime coordinators plus ServiceStatusReporter, not in a single global app-state singleton.

Service work in this repo usually touches one or more of:

  • start/stop orchestration
  • remembered-policy replay
  • handover-triggered restarts
  • active-policy signature tracking
  • ServiceStateStore status, events, and telemetry
  • hidden first-seen-network quick_v1 diagnostics probes after successful handovers

Architecture

ServiceController.start(mode)
  -> START_ACTION / STOP_ACTION intent
  -> RipDpiVpnService or RipDpiProxyService
  -> ProxyServiceRuntimeCoordinator / VpnServiceRuntimeCoordinator
  -> ConnectionPolicyResolver
  -> proxy / tunnel runtime start-stop-restart
  -> ServiceStatusReporter
  -> ServiceStateStore

Key Components

ComponentLocationRole
ServiceController / DefaultServiceControllercore/service/.../ServiceManager.ktApp entry point for start/stop
RipDpiVpnServicecore/service/.../RipDpiVpnService.ktAndroid VPN service shell
RipDpiProxyServicecore/service/.../RipDpiProxyService.ktAndroid foreground proxy service shell
BaseServiceRuntimeCoordinatorcore/service/.../ServiceRuntimeCoordinator.ktShared mutex, lifecycle state machine, stop/start/handover flow
ProxyServiceRuntimeCoordinatorcore/service/.../ProxyServiceRuntimeCoordinator.ktProxy-mode runtime orchestration
VpnServiceRuntimeCoordinatorcore/service/.../VpnServiceRuntimeCoordinator.ktVPN-mode proxy+tunnel orchestration, resolver refresh, DNS failover
ServiceStatusReportercore/service/.../ServiceStatusReporter.ktMaps runtime changes into UI-facing status/events/telemetry
ServiceStateStorecore/data/.../ServiceStateStore.ktShared StateFlow / SharedFlow store observed by the app
ConnectionPolicyResolvercore/service/.../ConnectionPolicyResolver.ktResolves live or remembered policy for the current network
NetworkHandoverMonitorcore/service/.../NetworkHandoverMonitor.ktDetects actionable network changes
ActiveConnectionPolicyStorecore/service/.../ActiveConnectionPolicyStore.ktPersists active policy metadata for diagnostics and telemetry

State Management

interface ServiceStateStore {
    val status: StateFlow<Pair<AppStatus, Mode>>
    val events: SharedFlow<ServiceEvent>
    val telemetry: StateFlow<ServiceTelemetrySnapshot>

    fun setStatus(status: AppStatus, mode: Mode)
    fun emitFailed(sender: Sender, reason: FailureReason)
    fun updateTelemetry(snapshot: ServiceTelemetrySnapshot)
}

Runtime code should usually write through ServiceStatusReporter. That keeps status, events, and telemetry consistent.

Lifecycle Pattern

Start/stop logic is serialized inside the coordinator mutex:

suspend fun start() {
    mutex.withLock {
        val resolution = resolveInitialConnectionPolicy()
        applyActiveConnectionPolicy(...)
        startResolvedRuntime(...)
        serviceRuntimeRegistry.register(session)
        updateStatus(ServiceStatus.Connected)
        startNetworkHandoverMonitoring()
        startModeTelemetryUpdates()
    }
}

The VPN coordinator adds:

  • VpnTunnelRuntime startup and shutdown
  • resolver refresh via VpnResolverRefreshPlanner
  • encrypted-DNS recovery via VpnEncryptedDnsFailoverController

The proxy coordinator adds:

  • ProxyRuntimeSupervisor startup and shutdown
  • proxy telemetry polling
  • proxy exit handling and failure classification

Where To Make Changes

  1. Change Android service classes only for Android-framework concerns such as intents, foreground-service behavior, or onRevoke().
  2. Change ProxyServiceRuntimeCoordinator or VpnServiceRuntimeCoordinator for runtime orchestration.
  3. Change ServiceStatusReporter for UI-visible status, failure, or telemetry projection.
  4. Change ConnectionPolicyResolver, NetworkHandoverMonitor, or resolver refresh logic when the behavior depends on network context.
  5. Treat ServiceTelemetrySnapshot and ServiceEvent as compatibility-sensitive contracts used by tests, diagnostics, and exports.

Common Mistakes

MistakeFix
Patching only the Android service shellMost lifecycle logic lives in the coordinator layer now
Writing directly to ServiceStateStore from arbitrary runtime codePrefer ServiceStatusReporter so fields stay coherent
Ignoring the coordinator mutex or lifecycle state machineStart/stop/handover paths must stay serialized
Forgetting remembered-policy or handover side effectsService restarts affect policy replay, telemetry, and hidden diagnostics probes
Treating telemetry fields as disposableServiceTelemetrySnapshot is part of the repo’s compatibility surface

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

ADB-based RIPDPI device/emulator debugging: build/install/launch, logcat filtering, fixture port-forwarding, instrumented tests, crash/ANR triage. Use when debugging on a real device or emulator.

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

RIPDPI Appium launch-contract reference: start routes and permission/service/data presets. Use when a test launches to the wrong screen or a new automation route is added. General flakiness: appium-test-debug.

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

RIPDPI Appium test authoring: page objects, resource-id locators, assertions, wait tiers. Use when writing a new Appium test or page object, or adding coverage for a new screen.

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

RIPDPI Appium failure triage: flaky tests, locator/session/wait issues, screenshot and element-tree debugging. Use when an Appium test fails or is flaky.

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

Add or modify a GitHub Actions job. Use when editing a file under .github/workflows/. Not for running a workflow locally (local-ci-act) or release signing (release-signing).

中文简介正在准备中。当前显示原文说明。

po4yka/RIPDPI812026年10月20日 更新

查看 po4yka 的全部技能

报告此技能的问题