As a developer who has been torn to the point where traditional application architectures have collapsed, today I will reveal the Stage model of HarmonyOS!When I first developed it with the Stage model, my colleague thought I had started a "performance hook", but in fact I just used this light and powerful architecture right~
1. Stage model: set up a "variable stage" for the application
1. What is the Stage model?
Imagine holding a concert:
- Traditional APP is like a fixed stage, all singers sing together, and the audience must turn off the lights when changing programs
- Stage model is like a split-screen stage. Group A is singing and preparing for the backstage of Group B, and the performance is not interrupted when the screen changes.
HarmonyOS's Stage model is like this "segment stage":
- Split the APP into multiple independent stages (screens), each of which manages a set of functions
- Different Stages can run at the same time, and the user experience will not be affected when switching
2. Four magic advantages of the Stage model
Advantages | Comparison of traditional APP vs Stage models | My development experience |
---|---|---|
Lightweight | Memory usage is reduced by 30%, such as "lossing weight" for the APP | 10 Stages in the background will not be stuck |
Efficient | Multiple Stages run in parallel, like concerts and multiple stage carousels | Video editing APP export speed +50% |
Flexible | Dynamic addition and subtraction Stage, like changing performances at any time | New features iterate 2 times faster |
Security | Stage isolation, like singers' background dressing room | Anti-malicious code attack success rate +90% |
2. Stage model vs. Traditional process: Concert stage PK
1. The core differences are clear at a glance
Features | Traditional Process Model (Single Stage) | Stage Model (Segment Stage) |
---|---|---|
Memory usage | Squeeze all functions together, like all staff squeezing the background | Storing the stations, like grouping the background |
Operation efficiency | Single thread queue, like singers taking turns singing | Multiple Stages parallel, like multi-stage rotation |
Extensibility | Resetting the stage when changing the function | Change the Stage is like changing the program list |
Security | A vulnerability is affected by the entire stage | A single Stage is attacked without affecting others |
2. My actual comparison data
When developing video editing app:
- Traditional mode: it takes 15 seconds to export 1080P video, and it will be stuck if you hang 3 functions in the background.
- Stage mode: The export time is reduced to 8 seconds, and 10 functions can be used smoothly
3. Stage model component: "Cast" on the stage
1. Three core roles
π§ AbilityStage: Stage Director
- Management Stage's birth, old age, sickness and death (life cycle)
- Allocate resources, like the director to divide props to actors
// Typical Stage configuration (config.json)
{
"module": {
"abilities": [
{
"name": ".MainStage",
"src": [
"MainStage.ts" // Stage entry file
]
}
]
}
}
π¨ UIAbility: Front-end actor
- The interface display is like a singer on the stage
- One UIAbility per page, render independently
// UIAbility example
import { UIAbility } from '@ohos.app.ability';
export default class MainAbility extends UIAbility {
onWindowStageCreate() {
// The interface is initialized, like a singer preparing for the stage
}
}
βοΈ ExtensionAbility: Backstage Helper
- manage backstage functions, like behind-the-scenes band -Subscription ServiceExt (backend service), FormExt (service card), etc.
// Background service ExtensionAbility
import { ServiceExtensionAbility } from '@ohos.app.ability';
export default class MusicService extends ServiceExtensionAbility {
onStart() {
// Backstage music plays like a band playing behind the scenes
}
}
2. Component division of labor table
Component Name | Type | Responsibilities | Life Analogy |
---|---|---|---|
EntryAbility | UIAbility | Application Portal Interface | Concert Opening Host |
FuncAbility | UIAbility | Functional Module Interface | Lead Singer |
ServiceExtAbility | ExtensionAbility | Backstage Service | Behind the Scenes Band |
FormExtAbility | ExtensionAbility | Service Card | Concert List |
4. Stage model development practice: Set up a "concert stage"
1. Three steps to build the basic Stage
β Create Stage configuration file
// module.json5
{
"module": {
"abilities": [
{
"name": ".MainStage",
"src": [
"MainStage.ts"
],
"window": {
"designWidth": 720,
"autoDesignWidth": true
}
}
]
}
}
β‘ Write the Stage entry code
// MainStage.ts
import { AbilityStage } from '@ohos.app.ability';
import { MainAbility } from './MainAbility';
export default class MainStage extends AbilityStage {
onCreate() {
console.log('Stage is created, like the concert starts to build the stage');
// Load the first UIAbility (host)
this.loadAbility(MainAbility);
}
}
β’ Add function Stage
// Added editing Stage
export default class EditStage extends AbilityStage {
onCreate() {
this.loadAbility(EditAbility); // Load the editing interface
}
}
2. Lifecycle Management: Stage's "Going to the Stage"
import { UIAbility } from '@ohos.app.ability';
export default class PageAbility extends UIAbility {
onStart() { // The stage lights are on, and the actors are on stage
console.log('Page Start');
}
onActive() { // The actor starts performing
console.log('page activation');
}
onInactive() { // The actor retreats to the backstage
console.log('page background');
}
onBackground() { // Turn off the lights on the stage
console.log('Page background, release resources');
}
}
5. Stage model optimization: Make the stage "light and fast"
1. Three ways to optimize memory
- Stage loading on demand: Unused Stages are destroyed in time, like the stage removal at the end of the concert
- Resource Sharing: Multiple Stages share picture resources, like multiple programs share a set of backgrounds
- Backstage Stage Hibernation: The background stage only leaves the smallest resources, like the background actors rest and save physical strength
2. Startup speed optimization
// Preload common Stages
export class AppStage extends AbilityStage {
onCreate() {
// Preload common functions Stage
this.preloadStage(EditStage);
this.preloadStage(ShareStage);
}
}
6. Security features: Stage's "Security System"
1. Three-layer security protection
- Process Isolation: Each Stage is independent of the process, like each program has an independent background
- Permission Control: Communication between stages must be authorized, such as the props between actors must be registered
- Data encryption: Data encryption transmission between stages, like prop seal
The last thought
When I used the Stage model to make a social APP for the first time, I opened three Stages at the same time, chatting, circle of friends, and live broadcasting, and the memory usage was 40% less than that of the traditional model!Now when doing a project, I first think about the Stage division, just like planning a concert program list, and the development efficiency will double.
Top comments (0)