色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙OS開發(fā)教學:【編程之重器-裝飾器】

jf_46214456 ? 2024-04-01 16:09 ? 次閱讀

HarmonyOS 有19種裝飾器

必須【2】

繪制一個頁面,這兩個肯定會用到

  1. @Entry
  2. @Component

可選【17】

  1. @State
  2. @Prop
  3. @Link
  4. @ObjectLink
  5. @Watch
  6. @Styles
  7. @StorageProp
  8. @StorageLink
  9. @Provide
  10. @Consume
  11. @Observed
  12. @Builder
  13. @BuilderParam
  14. @LocalStorageProp
  15. @LocalStorageLink
  16. @Extend
  17. @Concurrent

如果你有一定編程基礎,應該在你所熟悉的語言領域已見過這種形式。

@format("Hello, %s")
helloWorld: string;
復制
@Deprecated    
private static void helloWord(){        
  System.out.println("這個方法已經(jīng)不推薦使用");    
}
復制
@ParamMetadata("ClassThree", 5)
class HelloWorld {
   int timeYear;
}
復制
@RestController
public class HelloWorldController {
}
復制
@interface HelloWorldObject : NSObject {
}
復制

裝飾器

鴻蒙OS開發(fā)更多內容↓點擊HarmonyOS與OpenHarmony技術
鴻蒙技術文檔開發(fā)知識更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在這。

@Entry @Component

@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {
  @State message: string = 'Hello World'
  
  build() {    
     Row() {      
      Column() {        
           Text(this.message)          
             .fontSize(50)          
             .fontWeight(FontWeight.Bold)      
             }.width('100%')    
        }.height('100%')  
    }
  }
  
}
復制

@State

組件內狀態(tài)更新(即,變量內容發(fā)生變化,組件自動刷新)

@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {  
  @State message: string = 'Hello World'  
     build() {        
         Row() {              
            Column() {                    
               Text(this.message)
                 .fontSize(50)
                 .fontWeight(FontWeight.Bold)
               
               Button('更新this.message內容')
                 .onClick( ()= >{ 
                      this.message = 'HarmonyOS'
                 })
             }.width('100%')
          }.height('100%')  
     }
}

復制

@Link

父組件與子組件雙向同步數(shù)據(jù)(即,父組件和子組件都可以更新父組件已關聯(lián)的數(shù)據(jù))

NOTE : 子組件中的 @Link 變量,不能初始化。

import { TestChild } from './TestChild'
@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {
    @State message: string = '混沌'
    build() {
       Row() {
          // 父組件
          Column( {space : 20} ) {
                   Text(this.message)
                      .fontSize(30)
                      .fontWeight(FontWeight.Bold)
                   Button('Parent 更新文字內容')
                      .onClick( ()= >{
                          this.message = 'Hello Word'
                      })
                   // 子組件
                   TestChild({m: $message})
                   }.width('100%')
          }.height('100%')   
    }
}

復制
@Component
export struct  TestChild{  
  @Link m: string  
  private childCount: number = 0
  build(){    
     Button('Child 更新文字內容')      
     .onClick( ()= >{        
         this.m = 'HarmonyOS - Child' + (this.childCount++)      
     })  
  }
}
復制

@Prop

父組件與子組件單向同步數(shù)據(jù)(即,父組件可以同步數(shù)據(jù)至子組件,子組件無法同步數(shù)據(jù)到父組件)

NOTE: 父組件的更新指的是其內容相比之前狀態(tài)發(fā)生了變化,如下代碼中,如果將count 字段內容不賦值給 message, 則子組件僅僅會更新一次內容

import { TestChild } from './TestChild'

@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {
   @State message: string = '混沌'
   
   count: number = 0
   
   build() {
     Row() {
       Column( {space : 20} ) {
         Text(this.message)
           .fontSize(30)
           .fontWeight(FontWeight.Bold)
           
         Button('Parent 更新文字內容')
           .onClick( ()= >{
              this.message = 'Hello Word ' + this.count++
           })
           
         TestChild({m: this.message})
         
       }
       .width('100%')
     }
     .height('100%')
   }
}

復制
@Component
export struct TestChild{
   @Prop m: string
   private childCount: number = 0
   
   build(){
      Column( {space:20} ){
         Text(this.m).fontSize(30)
         Button('TestChild 更新文字內容')
           .onClick( ()= >{
              this.m = 'HarmonyOS - Child' + (this.childCount++)
            })
       }.backgroundColor(Color.Pink)
    }
}

復制

@Provide @Consume

父組件與子組件的子組件(官方叫法:后代組件)雙向向同步數(shù)據(jù)(即,父組件與后代組件可以相互操作 @Provide 修飾的數(shù)據(jù))

NOTE:@Provide 與 @Consume聲明的變量名必須一致

import {TestChild } from './TestChild'
@Entry //這是一個頁面
@Component // 頁面中有一個視圖容器,即根布局 Row()
struct Index {
  @Provide msg: string = '混沌'
  count: number = 0
  build(){
     Row(){
       Column( {space : 20} ) {
          Text(this.msg)
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
          
          Button('Parent 更新文字內容')
             .onClick( ()= >{
                  this.msg = 'Hello World ' + (this.count++)
               })
        
          TestChild()
          
       }.width('100%')
       
     }.height('100%')
  }
}
復制

TestChild 嵌套 TestChild2, TestChild2嵌套TestChild3

@Component
export struct TestChild{
   build(){
     TestChild2(){
       .width('100%')
       .backgroundColor(Color.Red)
       .align(Alignment.Center)
     }
   }
}

@Component
export struct TestChild2{
   build(){
      TestChild3()
   }
}

@Component
export struct TestChild3{
   @Consume msg: string
   
   count: number = 0
   
   build(){
      Column(){
        Text(this.msg).fontSize(30)
        Button('TestChild2 更新文字內容')
          .onClick( ()= >{
              this.msg = 'HarmonyOS - Child' + (this.count++)
           }) 
      }.backgroundColor(Color.Pink)
   }
}

復制

@Observed @ObjectLink

父組件與嵌套對象或數(shù)組進行雙向向同步數(shù)據(jù)

說明

實際業(yè)務研發(fā)中,我們封裝好多類(與 @Component 修飾的組件無關),這個時候,如果要讓父組件 和 嵌套對象進行數(shù)據(jù)同步,前邊所介紹的所有裝飾器是無法做到的。

NOTE

  1. 子組件中@ObjectLink裝飾器裝飾的狀態(tài)變量用于接收@Observed裝飾的類的實例,和父組件中對應的狀態(tài)變量建立雙向數(shù)據(jù)綁定
  2. 單獨使用@Observed是沒有任何作用的,需要搭配@ObjectLink或者@Prop使用初始狀態(tài)

NOTE:

這次你會發(fā)現(xiàn) 點擊“Parent 更新文字內容”,父組件文字沒有發(fā)生變化,原因是因為有3級嵌套類如何破解?

“子組件中@ObjectLink裝飾器裝飾的狀態(tài)變量用于接收@Observed裝飾的類的實例,和父組件中對應的狀態(tài)變量建立雙向數(shù)據(jù)綁定”

// 引起此問題初始化代碼
@State b: ClassB = new ClassB(new ClassA(0));
// 修改
@State a: ClassA = new ClassA(0)
@State b: ClassB = new ClassB(a)
復制
import {ClassA, ClassB, TestChild } from './TestChild'
@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {
      @State b: ClassB = new ClassB(new ClassA(0));
      build() {
         Row() {
          Column( {space : 20} ) {
            Text(this.b.a.c + '')
              .fontSize(30)
              .fontWeight(FontWeight.Bold)

            Button('Parent 更新文字內容')
              .onClick( ()= >{
                 this.b.a.c += 1;
              })

            TestChild({a: this.b.a})

         }.width('100%')
       }.height('100%')
    }
}
復制
@Component
export struct TestChild {
      @ObjectLink a: ClassA;
      
      build(){
         Column(){
           Text(this.a.c + '').fontSize(30)
           Button('TestChild2 更新文字內容')
             .onClick( ()= >{
                 this.a.c += 1;
               } )
               
         }.backgroundColor(Color.Pink)
      }

}      

@Observed
export class ClassA {
   public c: number;
   
   constructor(c: number) {
      this.c = c;
   }
   
}

export class ClassB {
   public a: ClassA;
   
   constructor(a: ClassA) {
      this.a = a;
   }
}

復制

@Watch

關注某個變量狀態(tài)發(fā)生變化

NOTE:監(jiān)聽的這個變量不要放在回調方法中,讓其發(fā)生二次變化,容易導致死循環(huán)

import {ClassA, ClassB, TestChild } from './TestChild'

@Entry //這是一個頁面
@Component //頁面中有一個視圖容器,即根布局 Row()
struct Index {
   @State msg: string = '混沌'
   @State index: number = 0;
   
   build(){
      Row(){
        Column( {space : 20} ) {
          Text(this.msg + ' ' + this.index)
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
            
          Button('Parent 更新文字內容')
            .onClick( ()= >{
               this.index++
            })
         
          TestChild({count: this.index})
          
        }.width('100%')
      }.height('100%')
   }   
}

復制

NOTE:使用 @Prop 修飾的原因:感知父組件改變 count 值

@Component
export struct  TestChild{
    @Prop @Watch('onCountUpdated') count: number;
    @State total: number = 0;
    
    
    // @Watch 回調
    onCountUpdated(propName: string): void {
       this.total += 1;
    }
    
    build(){
        Column(){
          Text('HarmonyOS - Child' + this.total).fontSize(30)
          Button('TestChild2 更新文字內容')
             .onClick( ()= >{
                this.count++
             })
        }.backgroundColor(Color.Pink)
    }

}
復制

@LocalStorageLink @LocalStorageProp

LocalStorage是頁面級的UI狀態(tài)存儲,通過@Entry裝飾器接收的參數(shù)可以在頁面內共享同一個LocalStorage實例。LocalStorage也可以在UIAbility內,頁面間共享狀態(tài)

LocalStorage在場景使用過程中包含了兩個裝飾器,即@LocalStorageLink 和 @LocalStorageProp

import { TestChild } from './TestChild';

// 創(chuàng)建新實例并使用給定對象初始化
let storage = new LocalStorage({ 'PropA': 47 });

// 使LocalStorage可從@Component組件訪問
@Entry(storage)
@Component
struct Index {
    // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
    @LocalStorageLink('PropA') count: number = 1;
    
    build(){
       Row(){
          Column( {space : 20} ){
             Text('混沌 ' + this.count)
               .fontSize(30)
               .fontWeight(FontWeight.Bold)
               
             Button('Parent 更新文字內容')
               .onClick( ()= >{
                  this.count++
               })
               
             TestChild()   
             
          }.width('100%')
          
       }.height('100%')
    }

}

復制
@Component
export struct TestChild {
   // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
   @LocalStorageLink('PropA') count: number = 1;
   
   build() {
      Column( {space : 20} ) {
        Text('HarmonyOS - Child' + this.count)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          
        Button('TestChild2 更新文字內容')
          .onClick( ()= >{
             this.count++
           })  
      }.width('100%')
      .backgroundColor(Color.Pink)
   }

}
復制

總結,本例展示了:

  • 使用構造函數(shù)創(chuàng)建LocalStorage實例storage
  • 使用@Entry裝飾器將storage添加到 Index 頂層組件中
  • @LocalStorageLink綁定LocalStorage對給定的屬性,建立雙向數(shù)據(jù)同步
import { TestChild } from './TestChild';

// 創(chuàng)建新實例并使用給定對象初始化
let storage = new LocalStorage({ 'PropA': 47 });

// 使LocalStorage可從@Component組件訪問
@Entry(storage)
@Component
struct Index {
    // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
    @LocalStorageProp('PropA') count: number = 1;
    
    build() {
       Row() {
          Column( {space : 20} ) {
            Text('混沌 ' + this.count)
              .fontSize(30)
              .fontWeight(FontWeight.Bold)
            
            Button('Parent 更新文字內容')
              .onClick( ()= >{
                 this.count++
                 })
            
            TestChild() 
                 
          }.width('100%')
          
       }.height('100%')
    }
}

復制
let storage = LocalStorage.GetShared()

@Component
export struct TestChild{
   // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
   @LocalStorageLink('PropA') count: number = 1;
   
   build() {
      Column( {space : 20} ) {
        Text('HarmonyOS - Child' + this.count)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
       
        Button('TestChild2 更新文字內容')
          .onClick( ()= >{
             this.count++
          })
       
      }.width('100%')
      .backgroundColor(Color.Pink)
   }
   
}

復制

總結

@LocalStorageLink(key)是和LocalStorage中key對應的屬性建立雙向數(shù)據(jù)同步:

  1. 本地修改發(fā)生,該修改會被寫回LocalStorage中;
  2. LocalStorage中的修改發(fā)生后,該修改會被同步到所有綁定LocalStorage對應key的屬性上,包括單向(@LocalStorageProp和通過prop創(chuàng)建的單向綁定變量)、雙向(@LocalStorageLink和通過link創(chuàng)建的雙向綁定變量)變量。

這個例子中TestChild組件使用了@LocalStorageLInk, 當其值發(fā)生變化時,會同時影響到父布局使用到 @LocalStorageProp 裝飾器的變量值,即 子組件的變量通過LocalStorage可以影響到相應的父組件變量值,但父組件的相關變量值是無法影響到子組件的變量值

@StorageLink @StorageProp

AppStorage是應用全局的UI狀態(tài)存儲,是和應用的進程綁定的,由UI框架在應用程序啟動時創(chuàng)建,為應用程序UI狀態(tài)屬性提供中央存儲。

AppStorage在場景使用過程中包含了兩個裝飾器,即@StorageLink 和 @StorageProp

和AppStorage不同的是,LocalStorage是頁面級的,通常應用于頁面內的數(shù)據(jù)共享。而AppStorage是應用級的全局狀態(tài)共享,還相當于整個應用的“中樞”,持久化數(shù)據(jù)PersistentStorage和環(huán)境變量Environment都是通過和AppStorage中轉,才可以和UI交互。

NOTE: AppStorage 和 LocalStorage是互不影響的

import { TestChild } from './TestChild';
AppStorage.SetOrCreate('PropA', 47);

// 創(chuàng)建新實例并使用給定對象初始化
let storage = new LocalStorage();

// 使LocalStorage可從@Component組件訪問
@Entry(storage)
@Component
struct Index {
   // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
   @StorageLink('PropA') count: number = 1;
   @LocalStorageLink('PropA') countL: number = 1;
   
   build() {
      Row(){
        Column( {space : 20} ) {
           Text('AppStorage ' + this.count)
             .fontSize(30)
             .fontWeight(FontWeight.Bold)
           
           Button('更新AppStorage內容')
             .onClick( ()= >{
                this.count++
             })
             
           Text('LocalStorage ' + this.countL)
             .fontSize(30)
             .fontWeight(FontWeight.Bold)
             
           Button('更新LocalStorage內容')
             .onClick( ()= >{
                this.countL++
             })
             
          TestChild() 
          
        }.width('100%')
        
      }.height('100%')
   }
}

復制
@Component
export struct TestChild {
   // @LocalStorageLink變量裝飾器與LocalStorage中的'PropA'屬性建立雙向綁定
   @StorageLink('PropA') count: number = 1;

  build(){
    Column( {space : 20} ) {
      Text('HarmonyOS - Child' + this.count)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        
      Button('TestChild2 更新文字內容')
        .onClick( ()= >{
          this.count++
        })
        
    }.width('100%')
    .backgroundColor(Color.Pink)
    
  }

}
復制

@Builder

@Builder 用于UI元素復用,開發(fā)者可以將重復使用的UI元素抽象成一個方法,在build方法里調用

總結
值引用方式,可以感知父組件的狀態(tài)變化
值傳遞方式,無法感知父組件的狀態(tài)變化

@Entry
@Component
struct Index {
   @State count: number = 1;
   
   @Builder BuilderOne($$: { paramA1: number }) {
      Column() {
        Text(`組件1值引用: ${$$.paramA1} `).fontSize(20)
      }.width('100%').backgroundColor(Color.Pink)
   }

   @Builder BuilderTwo(paramA1: number) {
      Column() {
        Text(`組件2值傳遞: ${paramA1} `).fontSize(20)
      }.width('100%').backgroundColor(Color.Pink)
   }

   build() {
     Row() {
       Column({ space: 20 }) {
          Text('混沌 ' + this.count)
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
            
          Button('更新')
            .onClick(() = > {
               this.count++
            })
            
         this.BuilderOne({ paramA1: this.count })
         
         this.BuilderTwo(this.count)
         
       }.width('100%')
       
     }.height('100%')
   }
}

復制

@BuilderParam

當開發(fā)者創(chuàng)建了自定義組件,并想對該組件添加特定功能時,例如在自定義組件中添加一個點擊跳轉操作。若直接在組件內嵌入事件方法,將會導致所有引入該自定義組件的地方均增加了該功能。為解決此問題,ArkUI引入了@BuilderParam裝飾器,@BuilderParam用來裝飾指向@Builder方法的變量,開發(fā)者可在初始化自定義組件時對此屬性進行賦值,為自定義組件增加特定的功能。該裝飾器用于聲明任意UI描述的一個元素,類似slot占位符。

import Prompt from '@system.prompt';
import { TestChild } from './TestChild';

@Entry
@Component
struct Index {
   
   @Builder BuilderOne() {
      TestChild( {msg: 'BuilderOne 視圖'} ) {
         Text('1').fontColor(Color.Red)
      }
   }
   
   @Builder BuilderTwo() {
      Stack(){
         TestChild( {msg: 'BuilderTwo 視圖'} ) {
           Text('1').fontColor(Color.Red)
           Text('2').fontColor(Color.Red)
         }
      }.onClick( () = > {
         Prompt.showToast({message: '點了 BuilderTwo'})
      })
   }
   
   @BuilderParam aBuilder0: () = > void = this.BuilderOne
   @BuilderParam aBuilder1: () = > void = this.BuilderTwo
   
   build(){
      Column({ space: 20 }) {
        this.aBuilder0()
        this.aBuilder1()
        
        TestChild( {msg: '中國'} ) {
           Text('1').fontColor(Color.Red)
        })
        
      }.width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .alignItems(HorizontalAlign.Center)
   }
   
}
復制
@Component
export struct TestChild {
     msg: string
     
     @BuilderParam aB0: () = > {}

     build(){
     
       Column( {space : 20} ) {
          this.aB0()
          
          Text('TestChild上下有 '+ this.msg)
            .fontSize(20)
            .fontWeight(FontWeight.Bold)
            
          this.aB0()  
            
       }.width('100%')
       .backgroundColor(Color.Pink)
     
     }

}
復制

總結

  1. @BuilderParam 既可以指向一個對象, 也可以指向@Builder修飾的方法
  2. 關于子組件占位出現(xiàn)兩個的問題,應該是系統(tǒng)原因
  3. 帶占位的自定義視圖是沒法響應onClick事件的,所以在本示例種,將子組件外邊再添加了一個容器組件,用來進行點擊事件響應

@Styles

如果每個組件的樣式都需要單獨設置,在開發(fā)過程中會出現(xiàn)大量代碼在進行重復樣式設置,雖然可以復制粘貼,但為了代碼簡潔性和后續(xù)方便維護,我們推出了可以提煉公共樣式進行復用的裝飾器@Styles

import Prompt from '@system.prompt';

@Entry
@Component
struct Index {

   //僅支持公共屬性
   @Styles fancy() {
      .width(200)
      .height(300)
      .backgroundColor(Color.Pink)
      .onClick(() = > {
         Prompt.showToast({message: 'I am fancy'})
      })
   }
   
   build() {
      Column({ space: 20 }) {
         Text('Styles')
           .textAlign(TextAlign.Center)
           .fancy()
           
      }.width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .alignItems(HorizontalAlign.Center)
   }
   
}

復制

總結

  1. @Styles 當前僅支持通用屬性
  2. @Styles 修飾的方法不支持參數(shù)
  3. 引用@Styles 修飾的方法時,建議放在最后,比如:Text().fancy().textAlign(....) 應該變?yōu)?Text().textAlign(....) .fancy()

@Extend

用于擴展原生組件樣式

注意

  1. 原生指的ArkTS寫的組件
  2. 擴展,不是新定義增加不存在的屬性
import Prompt from '@system.prompt';

//僅支持公共屬性
@Styles function fancy() {
    .width(200)
    .height(300)
    .backgroundColor(Color.Pink)
    .onClick(() = > {
        Prompt.showToast({message: 'I am fancy'})
    })
}

@Extend(Text) function superFancy(size:number, onClick?: () = > void) {
     .fontSize(size)
     .textAlign(TextAlign.Center)
     .fancy()
     .onClick(onClick)
}

@Entry
@Component
struct Index {
   
    onClickHandler() {
       Prompt.showToast({message: 'fancy出去了'})
    }
   
    build(){
      Column({ space: 20 }) {
        Text('Styles')
          .superFancy(30, this.onClickHandler.bind(this))
      }.width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .alignItems(HorizontalAlign.Center)
      
    }
    
}
復制

總結

  1. @Extend 在 @Styles基礎上,增加了傳參特性
  2. @Extend 必須定義為全局
  3. 支持封裝指定的組件的私有屬性和私有事件和預定義相同組件的@Extend的方法

@Concurrent

在使用TaskPool時,執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關校驗。

import taskpool from '@ohos.taskpool';

@Concurrent
function add(num1: number, num2: number): number {
    return num1 + num2;
}

async function ConcurrentFunc(): Promise< void > {
  try {
    let task: taskpool.Task = new taskpool.Task(add, 1, 2);
    console.info("taskpool res is: " + await taskpool.execute(task));
  }catch (e) {
  
  }
}

@Entry
@Component
struct Index {
   @State message: string = 'Hello World'
    
   build(){
      Row(){
        Column(){
          Text(this.message)
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(() = > {
               ConcurrentFunc();
            })
            
        }.width('100%')
        
      }.height('100%')
   }
}
可+mau123789記住是v喔!

搜狗高速瀏覽器截圖20240326151450.png

結尾

到此我們已學完所有的裝飾器用法,靈活使用裝飾器,全憑官方指導文檔是不夠的,它僅僅提供了一種最小化的場景使用模型,到了具體業(yè)務實現(xiàn)場景中,非常容易犯糊涂蒙圈。可以前往參考這個鴻蒙技術文檔qr23.cn/AKFP8k

個人感覺@BuilderParam和 @ObjectLink理解起來還是有點費勁。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 移動開發(fā)

    關注

    0

    文章

    52

    瀏覽量

    9809
  • 鴻蒙
    +關注

    關注

    57

    文章

    2388

    瀏覽量

    42964
  • HarmonyOS
    +關注

    關注

    79

    文章

    1980

    瀏覽量

    30401
  • OpenHarmony
    +關注

    關注

    25

    文章

    3744

    瀏覽量

    16473
  • 鴻蒙OS
    +關注

    關注

    0

    文章

    190

    瀏覽量

    4488
收藏 人收藏

    評論

    相關推薦

    鴻蒙OS開發(fā)實例:【裝飾@Observed@ObjectLink】

    加深對@Observed@ObjectLink 裝飾器使用的理解,以小故事做注釋
    的頭像 發(fā)表于 03-28 17:05 ?1037次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b>實例:【<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>@Observed@ObjectLink】

    鴻蒙開發(fā)南向環(huán)境搭建教學

    南向開發(fā)環(huán)境搭建教學,更多鴻蒙開發(fā)資料可以前往高清完整版 《鴻蒙開發(fā)4.0基礎-高階文檔》找保存
    發(fā)表于 01-05 16:38

    鴻蒙2.0來襲+HMS5.0更新+鴻蒙開發(fā)公布,就差鴻蒙手機了

    大眾而言,最能直觀感受的終端是手機,而華為也一直不發(fā)布手機鴻蒙OS,讓小部分人冷嘲熱諷。 在今年的9月7日即將召開2020華為開發(fā)者大會,鴻蒙2.0也將在此次大會中亮相,屆時會有更多設
    發(fā)表于 09-08 09:42

    谷歌全新推出的Fuchsia OS,對鴻蒙有什么影響?

    正式公測,搭載的設備也沒有亮相。回想安卓系統(tǒng)對于塞班、Windows Phone的超越,鴻蒙OS也可以說是占得了先機,能夠吸引更多的開發(fā)者和優(yōu)質軟件,才能夠取得更大的優(yōu)勢。在未來,能夠在不同形態(tài)的硬件設備中,都搭建起自己的生態(tài),
    發(fā)表于 09-08 16:12

    鴻蒙OS應用程序開發(fā)

    這份學習文檔主要是帶領大家在鴻蒙OS上學習開發(fā)一個應用程序,主要知識點如下:1、U-Boot引導文件燒寫方式;2、內核鏡像燒寫方式;3、鏡像運行。
    發(fā)表于 09-11 14:39

    軟通動力OpenHarmony啟鴻開發(fā)板搭配鴻蒙智能編程平臺助力青少年編程學習

    科技編程教育,物聯(lián)網(wǎng)、人工智能課堂教學鴻蒙智能編程平臺是一款基于Harmony OS的UI框架設計的一個智能
    發(fā)表于 05-18 15:48

    鴻蒙 OS 應用開發(fā)初體驗

    的 IDE、鴻蒙生態(tài)的開發(fā)語言 ArkTS,通過模擬運行起來了鴻蒙 OS 版 HelloWorld。對于已經(jīng)有移動
    發(fā)表于 11-02 19:38

    鴻蒙OS系統(tǒng)詳解

    華為的鴻蒙OS是一款“面向未來”的操作系統(tǒng),是基于微內核的全場景分布式OS,可按需擴展,實現(xiàn)更廣泛的系統(tǒng)安全。目前主要用于智能物聯(lián)網(wǎng),今年將擴展到智能手機上鴻蒙
    的頭像 發(fā)表于 11-12 11:24 ?1.4w次閱讀

    鴻蒙OS 2.0手機開發(fā)者Beta版發(fā)布會在京舉辦

    三個月前,鴻蒙OS 2.0正式在華為開發(fā)者大會2020亮相。12月16日,鴻蒙OS 2.0手機開發(fā)
    的頭像 發(fā)表于 12-16 09:29 ?1.9w次閱讀

    華為發(fā)布鴻蒙OS Beta版

    昨天華為發(fā)布鴻蒙OS Beta版了?鴻蒙系統(tǒng)一直在按照既有步伐前進,現(xiàn)在華為發(fā)布鴻蒙OS Beta版,而且一些生態(tài)
    的頭像 發(fā)表于 12-17 08:41 ?2910次閱讀

    國產(chǎn)操作系統(tǒng)的正式崛起 鴻蒙OS全面登場!

    升級到鴻蒙OS的計劃,隨后在12月16日發(fā)布了鴻蒙OS 2.0手機開發(fā)者Beta版本。 鴻蒙
    的頭像 發(fā)表于 02-20 10:10 ?1497次閱讀

    鴻蒙OS與Lite OS的區(qū)別是什么

    鴻蒙OS鴻蒙OS面向未來、面向全場景、分布式。在單設備系統(tǒng)能力基礎上,鴻蒙OS提出了基于同一套系
    的頭像 發(fā)表于 12-24 12:40 ?5069次閱讀

    鴻蒙os怎么升級

    6月2日,華為正式發(fā)布了鴻蒙armonyOS 2系統(tǒng),那么鴻蒙os如何升級?現(xiàn)將鴻蒙os升級方式告知如下。
    的頭像 發(fā)表于 06-08 16:26 ?2772次閱讀

    華為開發(fā)者大會2021鴻蒙os在哪場

    華為開發(fā)者大會2021將在10月22日-24日舉辦,地點為東莞松山湖,鴻蒙os 3.0或將與我們見面,那么華為開發(fā)者大會2021鴻蒙
    的頭像 發(fā)表于 10-22 15:24 ?1933次閱讀

    鴻蒙OS開發(fā)實例:【ArkTS類庫多線程@Concurrent裝飾校驗并發(fā)函數(shù)】

    在使用TaskPool時,執(zhí)行的并發(fā)函數(shù)需要使用該裝飾修飾,否則無法通過相關校驗。從API version 9開始,該裝飾支持在ArkTS卡片中使用。
    的頭像 發(fā)表于 04-02 14:45 ?750次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b>實例:【ArkTS類庫多線程@Concurrent<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>校驗并發(fā)函數(shù)】
    主站蜘蛛池模板: 偷窥欧美wc经典tv| 亚洲aaaa级特黄毛片| 亚洲字幕在线观看| 国产探花在线精品一区二区| 日韩人妻精品久久日| 超碰免费视频公开97| 日韩一卡二卡三卡四卡免费观在线| 边摸边吃奶边做下面视频| 人妖和美女玩| 国产黄A片在线观看永久免费麻豆| 无码人妻精品国产婷婷| 国产一区二区三区内射高清| 亚洲国产第一| 精品无人区麻豆乱码无限制| 一本大道无码AV天堂欧美| 久久视频这里只精品99热在线观看 | 久久强奷乱码老熟女| 总裁呻吟双腿大开男男H| 免费国产综合视频在线看| caoporn 超碰免费视频| 日本无码免费久久久精品| 国产69精品麻豆久久久久| 亚洲精品久久久无码一区二区| 精品成人片深夜| 2021精品国产综合久久| 秋霞电影网午夜鲁丝片| 国产精品国产三级国产专区53| 亚洲精品无码久久久久A片| 久久成人亚洲| 把内衣脱了把奶露出来| 西西人体大胆牲交PP6777| 久久成人免费观看全部免费| av影音先锋天堂网| 天堂岛www| 久久精品男人影院| 啊好大好厉害好爽真骚| 亚洲 欧美无码原创区| 久久视频这里只精品6国产| 草莓视频免费看| 亚洲色大成网站www久久九九| 男男gaygay拳头|