home / skills / pluginagentmarketplace / custom-plugin-android / platform
This skill helps you master Android Activity, Fragment, Intent, and Service lifecycles to build robust, responsive apps.
npx playbooks add skill pluginagentmarketplace/custom-plugin-android --skill platformReview the files below or copy the command above to add this skill to your agents.
---
name: platform
description: Android core components lifecycle, Activities, Fragments, Services, Intent system.
version: "2.0.0"
sasmp_version: "1.3.0"
# Agent Binding
bonded_agent: 02-platform
bond_type: PRIMARY_BOND
# Skill Configuration
atomic: true
single_responsibility: Android platform components & lifecycle
# Parameter Validation
parameters:
component:
type: string
enum: [activity, fragment, service, intent, permission]
required: false
lifecycle_state:
type: string
required: false
# Retry Configuration
retry:
max_attempts: 2
backoff: exponential
on_failure: return_lifecycle_diagram
# Observability
logging:
level: info
include: [query, component_type, response_time]
---
# Android Platform Skill
## Quick Start
### Activity Lifecycle
```kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onDestroy() {
super.onDestroy()
// Cleanup
}
}
```
### Fragment Usage
```kotlin
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.user.observe(viewLifecycleOwner) { user ->
updateUI(user)
}
}
}
```
## Key Concepts
### Lifecycle Callbacks
- `onCreate()`: Initial setup
- `onStart()`: Become visible
- `onResume()`: Gain focus
- `onPause()`: Lose focus
- `onStop()`: Hidden
- `onDestroy()`: Final cleanup
### Fragment Lifecycle
Similar to Activity but with:
- `onAttach()`: Attached to activity
- `onDetach()`: Detached
- Fragment manager for transactions
### Intent System
```kotlin
// Explicit
startActivity(Intent(this, DetailActivity::class.java))
// Implicit
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com")))
```
### Services
- Started: `startService()`
- Bound: `bindService()`
- Foreground: Visible notification
## Best Practices
✅ Handle lifecycle properly
✅ Use ViewModel for state
✅ Unregister listeners
✅ Test configuration changes
✅ Respect process lifecycle
## Resources
- [Activity Lifecycle](https://developer.android.com/guide/components/activities)
- [Fragment Guide](https://developer.android.com/guide/fragments)
- [Service Documentation](https://developer.android.com/guide/components/services)
This skill exposes core Android platform concepts: component lifecycles, activity and fragment patterns, services, and the Intent system. It helps developers reason about state transitions, lifecycle callbacks, and correct integration of ViewModel, listeners, and background work. The goal is practical guidance for building robust, lifecycle-aware apps.
The skill inspects and explains what to do at each lifecycle callback (onCreate, onStart, onResume, onPause, onStop, onDestroy) and maps equivalent Fragment callbacks (onAttach, onViewCreated, onDetach). It demonstrates explicit and implicit Intents, describes started, bound, and foreground services, and recommends where to place setup, cleanup, and long-lived work. It also highlights integration points for ViewModel and observer lifecycles to avoid leaks and data loss across configuration changes.
When should I use a Fragment instead of an Activity?
Use Fragments to compose reusable UI pieces within an Activity, enable multi-pane layouts, and share ViewModel state between related UI sections.
How do I avoid memory leaks with observers and listeners?
Register observers with lifecycle-aware owners (viewLifecycleOwner in Fragments) and unregister non-lifecycle listeners in onPause/onStop or onDestroy as appropriate.
When is a foreground Service required?
Use a foreground Service for user-noticeable long-running tasks (e.g., media playback, navigation) that must continue while the app is backgrounded; show a persistent notification.