Initial commit: add all skills files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
223
android-native-dev/references/performance-stability.md
Normal file
223
android-native-dev/references/performance-stability.md
Normal file
@@ -0,0 +1,223 @@
|
||||
# Performance & Stability Guidelines
|
||||
|
||||
Android Vitals thresholds, performance requirements, and stability best practices.
|
||||
|
||||
## Android Vitals Thresholds
|
||||
|
||||
### Core Metrics (Google Play)
|
||||
|
||||
Exceeding these thresholds affects app visibility on Google Play:
|
||||
|
||||
| Metric | Overall Threshold | Per Phone Model | Per Watch Model |
|
||||
|--------|-------------------|-----------------|-----------------|
|
||||
| User-perceived crash rate | **1.09%** | 8% | 4% |
|
||||
| User-perceived ANR rate | **0.47%** | 8% | 5% |
|
||||
| Excessive battery usage | 1% | - | 1% |
|
||||
| Excessive wake locks | 5% | - | - |
|
||||
|
||||
### Consequences of Exceeding Thresholds
|
||||
|
||||
- Reduced app visibility in Google Play
|
||||
- Warning label on store listing
|
||||
- Lower ranking in search results
|
||||
- Negative impact on user trust
|
||||
|
||||
## Startup Performance
|
||||
|
||||
### Requirements
|
||||
|
||||
| Metric | Target | Maximum |
|
||||
|--------|--------|---------|
|
||||
| Cold start | < 1 second | 2 seconds |
|
||||
| Warm start | < 500ms | 1 second |
|
||||
| Hot start | < 100ms | 500ms |
|
||||
|
||||
### If Startup Exceeds 2 Seconds
|
||||
|
||||
Must provide visual feedback:
|
||||
- Progress indicator
|
||||
- Splash screen with animation
|
||||
- Loading skeleton
|
||||
|
||||
### Optimization Techniques
|
||||
|
||||
| Technique | Impact |
|
||||
|-----------|--------|
|
||||
| Lazy initialization | Defer non-critical work |
|
||||
| Async loading | Move I/O off main thread |
|
||||
| View hierarchy optimization | Reduce layout depth |
|
||||
| App Startup library | Initialize components efficiently |
|
||||
| Baseline Profiles | Pre-compile hot paths |
|
||||
|
||||
## Rendering Performance
|
||||
|
||||
### Frame Rate Requirements
|
||||
|
||||
| Target | Frame Time | Notes |
|
||||
|--------|------------|-------|
|
||||
| 60 FPS | ≤ 16.67ms | Standard requirement |
|
||||
| 90 FPS | ≤ 11.11ms | High refresh rate displays |
|
||||
| 120 FPS | ≤ 8.33ms | Premium devices |
|
||||
|
||||
### Jank Detection
|
||||
|
||||
| Metric | Threshold | Severity |
|
||||
|--------|-----------|----------|
|
||||
| Slow frames | > 16ms | Warning |
|
||||
| Frozen frames | > 700ms | Critical |
|
||||
| Jank rate | > 1% of frames | Poor experience |
|
||||
|
||||
### Common Rendering Issues
|
||||
|
||||
| Issue | Cause | Solution |
|
||||
|-------|-------|----------|
|
||||
| Overdraw | Multiple layers drawn | Reduce background stacking |
|
||||
| Deep hierarchy | Complex view nesting | Use ConstraintLayout, Compose |
|
||||
| Main thread work | Blocking operations | Move to background thread |
|
||||
| Large bitmaps | Unoptimized images | Downsample, use vector |
|
||||
|
||||
## ANR Prevention
|
||||
|
||||
### ANR Triggers
|
||||
|
||||
| Scenario | Timeout |
|
||||
|----------|---------|
|
||||
| Input dispatch | 5 seconds |
|
||||
| Broadcast receiver | 10 seconds |
|
||||
| Service start | 20 seconds |
|
||||
|
||||
### Prevention Strategies
|
||||
|
||||
- Never perform network calls on main thread
|
||||
- Never perform database operations on main thread
|
||||
- Never perform file I/O on main thread
|
||||
- Use coroutines, RxJava, or other async mechanisms
|
||||
- Reduce synchronized block contention
|
||||
|
||||
### Common ANR Causes
|
||||
|
||||
| Cause | Solution |
|
||||
|-------|----------|
|
||||
| Network on main thread | Use coroutines/RxJava |
|
||||
| Database on main thread | Use Room with suspend |
|
||||
| File I/O on main thread | Use Dispatchers.IO |
|
||||
| Lock contention | Reduce synchronized blocks |
|
||||
| Dead locks | Careful threading design |
|
||||
|
||||
## Battery Optimization
|
||||
|
||||
### Wake Lock Guidelines
|
||||
|
||||
| Rule | Implementation |
|
||||
|------|----------------|
|
||||
| Minimize duration | Release as soon as possible |
|
||||
| Use appropriate type | PARTIAL_WAKE_LOCK only when needed |
|
||||
| Always release | Use try-finally or lifecycle |
|
||||
| Prefer WorkManager | System-managed scheduling |
|
||||
|
||||
### Background Restrictions
|
||||
|
||||
| Feature | Best Practice |
|
||||
|---------|---------------|
|
||||
| Background services | Use WorkManager instead |
|
||||
| Location | Request only when necessary |
|
||||
| Network | Batch requests, respect connectivity |
|
||||
| Alarms | Use inexact alarms when possible |
|
||||
|
||||
### Doze and App Standby
|
||||
|
||||
| Mode | Behavior | Adaptation |
|
||||
|------|----------|------------|
|
||||
| Doze | Limited network, alarms delayed | Use FCM for high-priority |
|
||||
| App Standby | Background work restricted | Use expedited WorkManager |
|
||||
| Buckets | Frequency limits by usage | Design for infrequent execution |
|
||||
|
||||
## Memory Management
|
||||
|
||||
### Memory Best Practices
|
||||
|
||||
| Practice | Benefit |
|
||||
|----------|---------|
|
||||
| Avoid memory leaks | Prevent OutOfMemoryError |
|
||||
| Use weak references | Allow garbage collection |
|
||||
| Recycle bitmaps | Reduce memory pressure |
|
||||
| Monitor heap | Profile regularly |
|
||||
|
||||
### Common Memory Issues
|
||||
|
||||
| Issue | Detection | Solution |
|
||||
|-------|-----------|----------|
|
||||
| Activity leak | LeakCanary | Fix lifecycle references |
|
||||
| Bitmap leak | Memory profiler | Recycle, use Glide/Coil |
|
||||
| Context leak | Static analysis | Use application context |
|
||||
| Handler leak | Lint warning | Use WeakReference |
|
||||
|
||||
## StrictMode
|
||||
|
||||
### What StrictMode Detects
|
||||
|
||||
| Category | Issues |
|
||||
|----------|--------|
|
||||
| Thread | Disk reads/writes, network, slow calls |
|
||||
| VM | Leaked objects, unsafe intents, content URI exposure |
|
||||
|
||||
Enable StrictMode in debug builds to detect violations during development.
|
||||
|
||||
## SDK Requirements
|
||||
|
||||
### Version Requirements
|
||||
|
||||
| Property | Requirement |
|
||||
|----------|-------------|
|
||||
| targetSdk | Latest Android SDK (Google Play requirement) |
|
||||
| compileSdk | Latest Android SDK |
|
||||
| minSdk | Based on target audience |
|
||||
|
||||
### Third-Party SDK Management
|
||||
|
||||
| Practice | Reason |
|
||||
|----------|--------|
|
||||
| Keep updated | Security fixes, compatibility |
|
||||
| Audit regularly | Remove unused dependencies |
|
||||
| Monitor crashes | SDKs can cause issues |
|
||||
| Check permissions | SDKs may request excessive permissions |
|
||||
|
||||
### Non-SDK Interface Restrictions
|
||||
|
||||
- Don't use reflection for hidden APIs
|
||||
- Use Android Studio lint to detect
|
||||
- APIs may break in future versions
|
||||
|
||||
## Monitoring and Profiling
|
||||
|
||||
### Tools
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|---------|
|
||||
| Android Studio Profiler | CPU, memory, network, energy |
|
||||
| Android Vitals (Play Console) | Production crash/ANR data |
|
||||
| Firebase Performance | Real-time performance monitoring |
|
||||
| Perfetto | Advanced system tracing |
|
||||
| Benchmark library | Reproducible measurements |
|
||||
|
||||
### Key Metrics to Track
|
||||
|
||||
| Metric | Tool |
|
||||
|--------|------|
|
||||
| Startup time | Macrobenchmark |
|
||||
| Frame timing | JankStats |
|
||||
| Memory usage | Memory Profiler |
|
||||
| Network latency | Network Profiler |
|
||||
| Battery drain | Energy Profiler |
|
||||
|
||||
## Performance Checklist
|
||||
|
||||
- [ ] Cold startup < 2 seconds
|
||||
- [ ] Rendering at 60 FPS
|
||||
- [ ] No StrictMode violations
|
||||
- [ ] Crash rate < 1.09%
|
||||
- [ ] ANR rate < 0.47%
|
||||
- [ ] No memory leaks
|
||||
- [ ] Background work uses WorkManager
|
||||
- [ ] Wake locks properly released
|
||||
- [ ] SDKs up to date
|
||||
Reference in New Issue
Block a user