Android传统开发 vs Android Compose vs HarmonyOS ArkUI 对照表

Android传统开发 vs Android Compose vs HarmonyOS ArkUI 对照表

1. 组件架构对比

维度 Android传统开发 Android Compose HarmonyOS ArkUI
UI组件模型 View/ViewGroup 树形结构 @Composable 函数式组件树 ArkUI 声明式组件树
组件定义方式 XML布局 + Java/Kotlin代码 Kotlin @Composable 函数 ArkTS 声明式语法
组件渲染引擎 Skia + SurfaceFlinger Skia + Compose Runtime ArkUI 渲染引擎
组件状态管理 手动状态管理 + ViewModel remember/mutableStateOf @State/@Prop 响应式状态
组件通信 Intent/Callback/EventBus 参数传递/回调函数 @Link/@Provide/@Consume
自定义组件 继承View/ViewGroup @Composable 函数 @Component 装饰器
组件通信代码示例:

Android传统开发 - EventBus通信:

kotlin 复制代码
// 发送事件
EventBus.getDefault().post(MessageEvent("Hello World"))

// 接收事件
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent) {
    textView.text = event.message
}

Android Compose - 参数传递:

kotlin 复制代码
@Composable
fun ParentComponent() {
    var message by remember { mutableStateOf("Hello") }
    
    ChildComponent(
        message = message,
        onMessageChange = { message = it }
    )
}

@Composable
fun ChildComponent(
    message: String,
    onMessageChange: (String) -> Unit
) {
    Button(onClick = { onMessageChange("Updated!") }) {
        Text(message)
    }
}

HarmonyOS ArkUI - @Link装饰器:

typescript 复制代码
@Component
struct ParentComponent {
  @State message: string = 'Hello'
  
  build() {
    Column() {
      ChildComponent({ message: $message })
    }
  }
}

@Component
struct ChildComponent {
  @Link message: string
  
  build() {
    Button('Click Me')
      .onClick(() => {
        this.message = 'Updated!'
      })
  }
}
自定义组件代码示例:

Android传统开发 - 继承View:

kotlin 复制代码
class CustomButton : View {
    private var text = "Custom Button"
    private val paint = Paint()
    
    constructor(context: Context) : super(context) {
        init()
    }
    
    private fun init() {
        paint.textSize = 48f
        paint.color = Color.BLUE
        setOnClickListener {
            text = "Clicked!"
            invalidate() // 手动触发重绘
        }
    }
    
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawText(text, 50f, 100f, paint)
    }
}

Android Compose - @Composable函数:

kotlin 复制代码
@Composable
fun CustomButton(
    text: String = "Custom Button",
    onClick: () -> Unit = {}
) {
    Button(
        onClick = onClick,
        colors = ButtonDefaults.buttonColors(
            containerColor = Color.Blue
        )
    ) {
        Text(
            text = text,
            fontSize = 18.sp,
            color = Color.White
        )
    }
}

// 使用
@Composable
fun MyScreen() {
    var buttonText by remember { mutableStateOf("Custom Button") }
    
    CustomButton(
        text = buttonText,
        onClick = { buttonText = "Clicked!" }
    )
}

HarmonyOS ArkUI - @Component装饰器:

typescript 复制代码
@Component
struct CustomButton {
  @Prop text: string = 'Custom Button'
  @Prop onClickCallback: () => void = () => {}
  
  build() {
    Button(this.text)
      .backgroundColor(Color.Blue)
      .fontColor(Color.White)
      .fontSize(18)
      .onClick(() => {
        this.onClickCallback()
      })
  }
}

// 使用
@Component
struct MyPage {
  @State buttonText: string = 'Custom Button'
  
  build() {
    Column() {
      CustomButton({
        text: this.buttonText,
        onClickCallback: () => {
          this.buttonText = 'Clicked!'
        }
      })
    }
  }
}

2. 应用组件对比

组件类型 Android传统开发 Android Compose HarmonyOS ArkUI 说明
页面组件 Activity @Composable + NavHost @Entry + @Component 承载UI界面的基本单元
片段组件 Fragment - - Android独有,现代开发中被替代
可组合组件 Custom View/ViewGroup @Composable 函数 @Component 装饰器 可复用的UI组件
状态组件 ViewModel + LiveData remember/rememberSaveable @State/@Prop 状态管理组件
导航组件 Intent + startActivity Navigation Compose Router 页面导航管理

导航组件代码示例:

Android传统开发:

java 复制代码
// 页面跳转
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("data", "Hello");
startActivity(intent);

// 带返回结果的跳转
startActivityForResult(intent, REQUEST_CODE);

Android Compose:

kotlin 复制代码
// 导航设置
val navController = rememberNavController()
NavHost(navController, startDestination = "home") {
    composable("home") { HomeScreen(navController) }
    composable("detail/{id}") { backStackEntry ->
        DetailScreen(backStackEntry.arguments?.getString("id"))
    }
}

// 页面跳转
navController.navigate("detail/123")

HarmonyOS ArkUI:

typescript 复制代码
// 页面跳转
import router from '@ohos.router'

// 跳转到指定页面
router.pushUrl({
  url: 'pages/Detail',
  params: { data: 'Hello' }
})

// 带回调的跳转
router.pushUrl({
  url: 'pages/Detail'
}, router.RouterMode.Standard, (err) => {
  if (err) console.error('跳转失败')
})

| 布局组件 | LinearLayout/RelativeLayout | Column/Row/Box/LazyColumn | Column/Row/Stack/List | 布局容器组件 |

布局组件代码示例:

Android传统开发:

xml 复制代码
<!-- LinearLayout 线性布局 -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标题" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮" />
</LinearLayout>

Android Compose:

kotlin 复制代码
// Column 垂直布局
Column(
    modifier = Modifier.fillMaxWidth(),
    verticalArrangement = Arrangement.spacedBy(8.dp)
) {
    Text("标题")
    Button(
        onClick = { /* 点击事件 */ },
        modifier = Modifier.fillMaxWidth()
    ) {
        Text("按钮")
    }
}

// LazyColumn 列表布局
LazyColumn {
    items(dataList) { item ->
        ListItem(item)
    }
}

HarmonyOS ArkUI:

typescript 复制代码
// Column 垂直布局
Column({ space: 8 }) {
  Text('标题')
    .fontSize(16)
    .fontWeight(FontWeight.Bold)
  
  Button('按钮')
    .width('100%')
    .onClick(() => {
      // 点击事件
    })
}
.width('100%')
.padding(16)

// List 列表布局
List({ space: 8 }) {
  ForEach(this.dataList, (item) => {
    ListItem() {
      Text(item.title)
    }
  })
}

3. 生命周期对比

3.1 页面级生命周期对比

阶段 Android传统开发 Android Compose HarmonyOS ArkUI
创建 onCreate() Composition aboutToAppear()
启动 onStart() - -
恢复 onResume() LaunchedEffect onPageShow()
暂停 onPause() - onPageHide()
停止 onStop() - -
销毁 onDestroy() onDispose aboutToDisappear()
重建 配置变化重建 Recomposition build()重建
页面生命周期代码示例

Android传统开发:

java 复制代码
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Lifecycle", "onCreate - 页面创建");
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Lifecycle", "onStart - 页面启动");
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Lifecycle", "onResume - 页面恢复");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Lifecycle", "onPause - 页面暂停");
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Lifecycle", "onDestroy - 页面销毁");
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun MainScreen() {
    // Composition阶段 - 组合函数被调用
    LaunchedEffect(Unit) {
        Log.d("Lifecycle", "LaunchedEffect - 页面恢复时执行")
    }
    
    DisposableEffect(Unit) {
        Log.d("Lifecycle", "DisposableEffect - 进入组合")
        
        onDispose {
            Log.d("Lifecycle", "onDispose - 离开组合")
        }
    }
    
    Column {
        Text("主页面内容")
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct MainPage {
  aboutToAppear() {
    console.log('Lifecycle', 'aboutToAppear - 页面即将出现')
  }
  
  onPageShow() {
    console.log('Lifecycle', 'onPageShow - 页面显示')
  }
  
  onPageHide() {
    console.log('Lifecycle', 'onPageHide - 页面隐藏')
  }
  
  aboutToDisappear() {
    console.log('Lifecycle', 'aboutToDisappear - 页面即将销毁')
  }
  
  build() {
    Column({ space: 16 }) {
      Text('主页面内容')
        .fontSize(18)
    }
    .padding(16)
  }
}

3.2 组件级生命周期对比

阶段 Android传统开发 Android Compose HarmonyOS ArkUI
创建 View构造函数 @Composable调用 @Component创建
测量 onMeasure() - -
布局 onLayout() Layout阶段 build()方法
绘制 onDraw() Draw阶段 自动渲染
更新 invalidate() Recomposition 状态变化自动更新
销毁 - 离开组合树 aboutToDisappear()
组件生命周期代码示例

Android传统开发:

java 复制代码
public class CustomView extends View {
    public CustomView(Context context) {
        super(context);
        Log.d("Component", "构造函数 - 组件创建");
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.d("Component", "onMeasure - 组件测量");
    }
    
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        Log.d("Component", "onLayout - 组件布局");
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.d("Component", "onDraw - 组件绘制");
    }
    
    public void updateContent() {
        invalidate(); // 触发重绘
        Log.d("Component", "invalidate - 组件更新");
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun CustomComponent(text: String) {
    // @Composable调用 - 组件创建
    Log.d("Component", "Composable调用 - 组件创建")
    
    // 状态变化时会触发Recomposition
    var count by remember { mutableStateOf(0) }
    
    LaunchedEffect(count) {
        Log.d("Component", "Recomposition - 组件重组")
    }
    
    DisposableEffect(Unit) {
        onDispose {
            Log.d("Component", "离开组合树 - 组件销毁")
        }
    }
    
    Column {
        Text(text = text)
        Button(
            onClick = { count++ }
        ) {
            Text("点击次数: $count")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Component
struct CustomComponent {
  @State count: number = 0
  private text: string = ''
  
  aboutToAppear() {
    console.log('Component', 'aboutToAppear - 组件即将出现')
  }
  
  aboutToDisappear() {
    console.log('Component', 'aboutToDisappear - 组件即将销毁')
  }
  
  build() {
    // build()方法 - 组件布局和渲染
    console.log('Component', 'build - 组件构建')
    
    Column({ space: 12 }) {
      Text(this.text)
        .fontSize(16)
      
      Button(`点击次数: ${this.count}`)
        .onClick(() => {
          this.count++
          // 状态变化自动触发UI更新
          console.log('Component', '状态变化自动更新')
        })
    }
  }
}

4. 状态管理对比

状态类型 Android传统开发 Android Compose HarmonyOS ArkUI 使用场景
局部状态 成员变量 + setter/getter remember + mutableStateOf @State 组件内部状态
共享状态 ViewModel + LiveData ViewModel + collectAsState @Provide/@Consume 跨组件状态共享
持久化状态 SharedPreferences rememberSaveable PersistentStorage 数据持久化
全局状态 Application + 单例 Hilt + ViewModel AppStorage 应用级状态管理
双向绑定 DataBinding(已废弃) 回调函数 + State @Link 父子组件状态同步
状态观察 Observer模式 collectAsState @Watch 状态变化监听
副作用管理 手动管理 LaunchedEffect/SideEffect - 处理副作用操作
UI更新 手动调用更新方法 自动重组 响应式更新 UI状态同步
状态管理代码示例

1. 局部状态管理

Android传统开发:

java 复制代码
public class CounterActivity extends AppCompatActivity {
    private TextView counterText;
    private Button incrementButton;
    private int counter = 0; // 成员变量存储状态
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_counter);
        
        counterText = findViewById(R.id.counterText);
        incrementButton = findViewById(R.id.incrementButton);
        
        updateUI(); // 手动更新UI
        
        incrementButton.setOnClickListener(v -> {
            counter++; // 修改状态
            updateUI(); // 手动更新UI
        });
    }
    
    private void updateUI() {
        counterText.setText("计数: " + counter);
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun CounterScreen() {
    // remember + mutableStateOf 管理局部状态
    var counter by remember { mutableStateOf(0) }
    
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Text(
            text = "计数: $counter",
            fontSize = 24.sp
        )
        
        Spacer(modifier = Modifier.height(16.dp))
        
        Button(
            onClick = { counter++ } // 状态变化自动触发重组
        ) {
            Text("增加")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct CounterPage {
  @State counter: number = 0 // @State装饰器管理局部状态
  
  build() {
    Column({ space: 16 }) {
      Text(`计数: ${this.counter}`)
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
      
      Button('增加')
        .onClick(() => {
          this.counter++ // 状态变化自动更新UI
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}

2. 共享状态管理

Android传统开发:

java 复制代码
// ViewModel
public class SharedViewModel extends ViewModel {
    private MutableLiveData<String> message = new MutableLiveData<>("Hello");
    
    public LiveData<String> getMessage() {
        return message;
    }
    
    public void updateMessage(String newMessage) {
        message.setValue(newMessage);
    }
}

// Activity
public class MainActivity extends AppCompatActivity {
    private SharedViewModel viewModel;
    private TextView messageText;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        viewModel = new ViewModelProvider(this).get(SharedViewModel.class);
        messageText = findViewById(R.id.messageText);
        
        // 观察状态变化
        viewModel.getMessage().observe(this, message -> {
            messageText.setText(message);
        });
    }
}

Android Compose:

kotlin 复制代码
// ViewModel
class SharedViewModel : ViewModel() {
    private val _message = mutableStateOf("Hello")
    val message: State<String> = _message
    
    fun updateMessage(newMessage: String) {
        _message.value = newMessage
    }
}

// Composable
@Composable
fun SharedStateScreen(viewModel: SharedViewModel = hiltViewModel()) {
    val message by viewModel.message // collectAsState自动观察
    
    Column {
        Text(text = message)
        
        Button(
            onClick = { viewModel.updateMessage("Updated!") }
        ) {
            Text("更新消息")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
// 共享状态类
class SharedState {
  @Provide message: string = 'Hello'
  
  updateMessage(newMessage: string) {
    this.message = newMessage
  }
}

// 父组件
@Entry
@Component
struct ParentPage {
  @Provide sharedState: SharedState = new SharedState()
  
  build() {
    Column() {
      ChildComponent()
      AnotherChildComponent()
    }
  }
}

// 子组件
@Component
struct ChildComponent {
  @Consume sharedState: SharedState
  
  build() {
    Column() {
      Text(this.sharedState.message)
      
      Button('更新消息')
        .onClick(() => {
          this.sharedState.updateMessage('Updated!')
        })
    }
  }
}

5. 导航与路由对比

功能 Android传统开发 Android Compose HarmonyOS ArkUI 说明
导航容器 Activity Task Stack NavHost Router 导航管理容器
页面跳转 Intent + startActivity() navController.navigate() router.pushUrl() 基本页面导航
参数传递 Intent.putExtra() NavArguments router.pushUrl(params) 页面间数据传递
返回处理 finish() + onBackPressed() popBackStack() router.back() 页面返回管理
路由定义 AndroidManifest.xml NavGraph 路由表配置 路由结构定义
深度链接 Intent Filter DeepLink 路由表配置 外部链接处理
导航动画 Activity Transition AnimatedNavHost 页面转场动画 页面切换效果
嵌套导航 Fragment嵌套 Nested NavGraph - 复杂导航结构
结果返回 startActivityForResult() - router.back()携带数据 页面间结果传递
导航与路由代码示例

1. 基本页面跳转

Android传统开发:

java 复制代码
// 主页面Activity
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button navigateButton = findViewById(R.id.navigateButton);
        navigateButton.setOnClickListener(v -> {
            // Intent页面跳转
            Intent intent = new Intent(this, DetailActivity.class);
            intent.putExtra("userId", 123); // 参数传递
            intent.putExtra("userName", "张三");
            startActivity(intent);
        });
    }
}

// 详情页面Activity
public class DetailActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        
        // 获取传递的参数
        Intent intent = getIntent();
        int userId = intent.getIntExtra("userId", 0);
        String userName = intent.getStringExtra("userName");
        
        TextView userInfo = findViewById(R.id.userInfo);
        userInfo.setText("用户ID: " + userId + ", 姓名: " + userName);
        
        Button backButton = findViewById(R.id.backButton);
        backButton.setOnClickListener(v -> finish()); // 返回上一页
    }
}

Android Compose:

kotlin 复制代码
// 导航设置
@Composable
fun AppNavigation() {
    val navController = rememberNavController()
    
    NavHost(
        navController = navController,
        startDestination = "main"
    ) {
        composable("main") {
            MainScreen(navController)
        }
        composable(
            "detail/{userId}/{userName}",
            arguments = listOf(
                navArgument("userId") { type = NavType.IntType },
                navArgument("userName") { type = NavType.StringType }
            )
        ) { backStackEntry ->
            val userId = backStackEntry.arguments?.getInt("userId") ?: 0
            val userName = backStackEntry.arguments?.getString("userName") ?: ""
            DetailScreen(navController, userId, userName)
        }
    }
}

@Composable
fun MainScreen(navController: NavController) {
    Column {
        Button(
            onClick = {
                // 导航到详情页面并传递参数
                navController.navigate("detail/123/张三")
            }
        ) {
            Text("跳转到详情页")
        }
    }
}

@Composable
fun DetailScreen(navController: NavController, userId: Int, userName: String) {
    Column {
        Text("用户ID: $userId, 姓名: $userName")
        
        Button(
            onClick = { navController.popBackStack() } // 返回上一页
        ) {
            Text("返回")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
// 主页面
@Entry
@Component
struct MainPage {
  build() {
    Column({ space: 16 }) {
      Text('主页面')
        .fontSize(24)
      
      Button('跳转到详情页')
        .onClick(() => {
          // 页面跳转并传递参数
          router.pushUrl({
            url: 'pages/DetailPage',
            params: {
              userId: 123,
              userName: '张三'
            }
          })
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}

// 详情页面
@Entry
@Component
struct DetailPage {
  @State userId: number = 0
  @State userName: string = ''
  
  aboutToAppear() {
    // 获取传递的参数
    const params = router.getParams() as Record<string, Object>
    this.userId = params['userId'] as number
    this.userName = params['userName'] as string
  }
  
  build() {
    Column({ space: 16 }) {
      Text(`用户ID: ${this.userId}, 姓名: ${this.userName}`)
        .fontSize(18)
      
      Button('返回')
        .onClick(() => {
          router.back() // 返回上一页
        })
      
      Button('返回并传递数据')
        .onClick(() => {
          router.back({
            url: 'pages/MainPage',
            params: {
              result: '处理完成'
            }
          })
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}

2. 路由配置

Android传统开发 (AndroidManifest.xml):

xml 复制代码
<application>
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <!-- 深度链接配置 -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="myapp" android:host="main" />
        </intent-filter>
    </activity>
    
    <activity
        android:name=".DetailActivity"
        android:parentActivityName=".MainActivity" />
</application>

Android Compose (NavGraph):

kotlin 复制代码
@Composable
fun AppNavigation() {
    val navController = rememberNavController()
    
    NavHost(
        navController = navController,
        startDestination = "main"
    ) {
        composable("main") { MainScreen(navController) }
        
        composable(
            "detail/{id}",
            deepLinks = listOf(
                navDeepLink { uriPattern = "myapp://detail/{id}" }
            )
        ) { DetailScreen(navController) }
        
        // 嵌套导航
        navigation(
            startDestination = "profile_main",
            route = "profile"
        ) {
            composable("profile_main") { ProfileMainScreen() }
            composable("profile_edit") { ProfileEditScreen() }
        }
    }
}

HarmonyOS ArkUI (路由表配置):

json 复制代码
{
  "src": [
    "pages/MainPage",
    "pages/DetailPage",
    "pages/ProfilePage"
  ],
  "launchType": "standard"
}

6. 事件处理对比

事件类型 Android传统开发 Android Compose HarmonyOS ArkUI 实现方式
点击事件 OnClickListener Modifier.clickable onClick 基础交互事件
触摸事件 OnTouchListener Modifier.pointerInput onTouch 触摸手势处理
长按事件 OnLongClickListener Modifier.combinedClickable onLongPress 长按交互
滑动事件 OnScrollListener Modifier.draggable PanGesture 手势识别
键盘事件 OnKeyListener onKeyEvent onKeyEvent 键盘输入处理
焦点事件 OnFocusChangeListener Modifier.focusable onFocus/onBlur 焦点状态管理
手势组合 GestureDetector detectGestures 手势识别器 复杂手势处理
生命周期事件 Activity回调方法 LaunchedEffect 页面生命周期回调 生命周期处理
事件处理代码示例

1. 点击事件

Android传统开发:

java 复制代码
public class EventActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);
        
        Button clickButton = findViewById(R.id.clickButton);
        TextView resultText = findViewById(R.id.resultText);
        
        // 设置点击监听器
        clickButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resultText.setText("按钮被点击了!");
            }
        });
        
        // Lambda表达式简化写法
        clickButton.setOnClickListener(v -> {
            resultText.setText("使用Lambda表达式处理点击");
        });
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun EventHandlingScreen() {
    var clickCount by remember { mutableStateOf(0) }
    var message by remember { mutableStateOf("等待点击") }
    
    Column(
        modifier = Modifier.padding(16.dp),
        verticalArrangement = Arrangement.spacedBy(16.dp)
    ) {
        Text(text = message)
        
        Button(
            onClick = {
                clickCount++
                message = "点击次数: $clickCount"
            },
            modifier = Modifier.clickable {
                // 可以添加额外的点击处理逻辑
            }
        ) {
            Text("点击我")
        }
        
        // 自定义可点击组件
        Box(
            modifier = Modifier
                .size(100.dp)
                .background(Color.Blue)
                .clickable {
                    message = "蓝色方块被点击"
                },
            contentAlignment = Alignment.Center
        ) {
            Text("点击区域", color = Color.White)
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct EventHandlingPage {
  @State clickCount: number = 0
  @State message: string = '等待点击'
  
  build() {
    Column({ space: 16 }) {
      Text(this.message)
        .fontSize(18)
      
      Button('点击我')
        .onClick(() => {
          this.clickCount++
          this.message = `点击次数: ${this.clickCount}`
        })
      
      // 自定义可点击组件
      Row()
        .width(100)
        .height(100)
        .backgroundColor(Color.Blue)
        .onClick(() => {
          this.message = '蓝色方块被点击'
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .padding(16)
  }
}

2. 触摸和手势事件

Android传统开发:

java 复制代码
public class TouchEventActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_touch);
        
        View touchView = findViewById(R.id.touchView);
        TextView statusText = findViewById(R.id.statusText);
        
        // 触摸事件监听
        touchView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        statusText.setText("触摸开始: (" + event.getX() + ", " + event.getY() + ")");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        statusText.setText("触摸移动: (" + event.getX() + ", " + event.getY() + ")");
                        break;
                    case MotionEvent.ACTION_UP:
                        statusText.setText("触摸结束");
                        break;
                }
                return true;
            }
        });
        
        // 长按事件
        touchView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                statusText.setText("长按事件触发");
                return true;
            }
        });
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun TouchEventScreen() {
    var touchInfo by remember { mutableStateOf("等待触摸") }
    
    Column(
        modifier = Modifier.padding(16.dp)
    ) {
        Text(text = touchInfo)
        
        Spacer(modifier = Modifier.height(16.dp))
        
        Box(
            modifier = Modifier
                .size(200.dp)
                .background(Color.LightGray)
                .pointerInput(Unit) {
                    detectTapGestures(
                        onTap = { offset ->
                            touchInfo = "点击位置: (${offset.x.toInt()}, ${offset.y.toInt()})"
                        },
                        onLongPress = { offset ->
                            touchInfo = "长按位置: (${offset.x.toInt()}, ${offset.y.toInt()})"
                        }
                    )
                }
                .pointerInput(Unit) {
                    detectDragGestures(
                        onDragStart = { offset ->
                            touchInfo = "拖拽开始: (${offset.x.toInt()}, ${offset.y.toInt()})"
                        },
                        onDrag = { change, _ ->
                            touchInfo = "拖拽中: (${change.position.x.toInt()}, ${change.position.y.toInt()})"
                        },
                        onDragEnd = {
                            touchInfo = "拖拽结束"
                        }
                    )
                },
            contentAlignment = Alignment.Center
        ) {
            Text("触摸区域")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct TouchEventPage {
  @State touchInfo: string = '等待触摸'
  
  build() {
    Column({ space: 16 }) {
      Text(this.touchInfo)
        .fontSize(16)
      
      Row()
        .width(200)
        .height(200)
        .backgroundColor(Color.Gray)
        .onClick(() => {
          this.touchInfo = '点击事件触发'
        })
        .onTouch((event: TouchEvent) => {
          switch (event.type) {
            case TouchType.Down:
              this.touchInfo = `触摸开始: (${event.touches[0].x.toFixed(0)}, ${event.touches[0].y.toFixed(0)})`
              break
            case TouchType.Move:
              this.touchInfo = `触摸移动: (${event.touches[0].x.toFixed(0)}, ${event.touches[0].y.toFixed(0)})`
              break
            case TouchType.Up:
              this.touchInfo = '触摸结束'
              break
          }
          return true
        })
        .gesture(
          LongPressGesture({ repeat: false })
            .onAction(() => {
              this.touchInfo = '长按事件触发'
            })
        )
        .gesture(
          PanGesture()
            .onActionStart(() => {
              this.touchInfo = '拖拽开始'
            })
            .onActionUpdate((event: GestureEvent) => {
              this.touchInfo = `拖拽中: (${event.offsetX.toFixed(0)}, ${event.offsetY.toFixed(0)})`
            })
            .onActionEnd(() => {
              this.touchInfo = '拖拽结束'
            })
        )
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .padding(16)
  }
}

7. 布局系统对比

布局类型 Android传统开发 Android Compose HarmonyOS ArkUI 特点
线性布局 LinearLayout Column/Row Column/Row 垂直/水平排列
层叠布局 FrameLayout Box Stack 层叠布局
网格布局 GridLayout LazyVerticalGrid Grid 网格排列
相对布局 RelativeLayout - RelativeContainer 相对位置布局
约束布局 ConstraintLayout ConstraintLayout - 复杂约束关系
滚动布局 ScrollView/RecyclerView LazyColumn/LazyRow List/Scroll 可滚动内容
分页布局 ViewPager HorizontalPager Swiper 分页滑动
流式布局 FlexboxLayout FlowLayout Flex 自动换行布局
表格布局 TableLayout - - 表格形式布局
布局系统代码示例

1. 线性布局 (垂直/水平排列)

Android传统开发:

xml 复制代码
<!-- 垂直线性布局 -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="标题"
        android:textSize="24sp" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="副标题"
        android:textSize="16sp"
        android:layout_marginTop="8dp" />
    
    <!-- 水平线性布局 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="16dp">
        
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消"
            android:layout_marginEnd="8dp" />
        
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定" />
    </LinearLayout>
</LinearLayout>

Android Compose:

kotlin 复制代码
@Composable
fun LinearLayoutScreen() {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        Text(
            text = "标题",
            fontSize = 24.sp,
            fontWeight = FontWeight.Bold
        )
        
        Text(
            text = "副标题",
            fontSize = 16.sp,
            color = Color.Gray
        )
        
        Spacer(modifier = Modifier.height(8.dp))
        
        // 水平排列
        Row(
            modifier = Modifier.fillMaxWidth(),
            horizontalArrangement = Arrangement.spacedBy(8.dp)
        ) {
            Button(
                onClick = { },
                modifier = Modifier.weight(1f)
            ) {
                Text("取消")
            }
            
            Button(
                onClick = { },
                modifier = Modifier.weight(1f)
            ) {
                Text("确定")
            }
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct LinearLayoutPage {
  build() {
    Column({ space: 8 }) {
      Text('标题')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
      
      Text('副标题')
        .fontSize(16)
        .fontColor(Color.Gray)
      
      // 水平排列
      Row({ space: 8 }) {
        Button('取消')
          .layoutWeight(1)
        
        Button('确定')
          .layoutWeight(1)
      }
      .width('100%')
      .margin({ top: 16 })
    }
    .width('100%')
    .height('100%')
    .padding(16)
    .alignItems(HorizontalAlign.Start)
  }
}

2. 层叠布局

Android传统开发:

xml 复制代码
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">
    
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background"
        android:scaleType="centerCrop" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="覆盖文字"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        android:background="#80000000"
        android:padding="8dp" />
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:text="操作" />
</FrameLayout>

Android Compose:

kotlin 复制代码
@Composable
fun StackLayoutScreen() {
    Box(
        modifier = Modifier
            .fillMaxWidth()
            .height(200.dp)
    ) {
        // 背景图片
        Image(
            painter = painterResource(id = R.drawable.background),
            contentDescription = null,
            modifier = Modifier.fillMaxSize(),
            contentScale = ContentScale.Crop
        )
        
        // 中心文字
        Text(
            text = "覆盖文字",
            color = Color.White,
            fontSize = 18.sp,
            modifier = Modifier
                .align(Alignment.Center)
                .background(
                    Color.Black.copy(alpha = 0.5f),
                    RoundedCornerShape(4.dp)
                )
                .padding(8.dp)
        )
        
        // 右下角按钮
        Button(
            onClick = { },
            modifier = Modifier
                .align(Alignment.BottomEnd)
                .padding(16.dp)
        ) {
            Text("操作")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct StackLayoutPage {
  build() {
    Stack({ alignContent: Alignment.Center }) {
      // 背景图片
      Image($r('app.media.background'))
        .width('100%')
        .height(200)
        .objectFit(ImageFit.Cover)
      
      // 中心文字
      Text('覆盖文字')
        .fontSize(18)
        .fontColor(Color.White)
        .backgroundColor(Color.Black)
        .opacity(0.8)
        .padding(8)
        .borderRadius(4)
      
      // 右下角按钮
      Button('操作')
        .margin({ bottom: 16, right: 16 })
    }
    .alignContent(Alignment.BottomEnd)
    .width('100%')
    .height(200)
  }
}

3. 网格布局

Android传统开发:

xml 复制代码
<GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="2"
    android:rowCount="2"
    android:padding="16dp">
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_columnWeight="1"
        android:layout_margin="4dp"
        android:background="#FF5722"
        android:gravity="center"
        android:text="项目 1"
        android:textColor="@android:color/white" />
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_columnWeight="1"
        android:layout_margin="4dp"
        android:background="#2196F3"
        android:gravity="center"
        android:text="项目 2"
        android:textColor="@android:color/white" />
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_columnWeight="1"
        android:layout_margin="4dp"
        android:background="#4CAF50"
        android:gravity="center"
        android:text="项目 3"
        android:textColor="@android:color/white" />
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_columnWeight="1"
        android:layout_margin="4dp"
        android:background="#FF9800"
        android:gravity="center"
        android:text="项目 4"
        android:textColor="@android:color/white" />
</GridLayout>

Android Compose:

kotlin 复制代码
@Composable
fun GridLayoutScreen() {
    val items = listOf(
        "项目 1" to Color(0xFFFF5722),
        "项目 2" to Color(0xFF2196F3),
        "项目 3" to Color(0xFF4CAF50),
        "项目 4" to Color(0xFFFF9800)
    )
    
    LazyVerticalGrid(
        columns = GridCells.Fixed(2),
        contentPadding = PaddingValues(16.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        items(items) { (text, color) ->
            Box(
                modifier = Modifier
                    .height(100.dp)
                    .background(color, RoundedCornerShape(8.dp)),
                contentAlignment = Alignment.Center
            ) {
                Text(
                    text = text,
                    color = Color.White,
                    fontWeight = FontWeight.Bold
                )
            }
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct GridLayoutPage {
  private items: Array<{text: string, color: Color}> = [
    { text: '项目 1', color: Color.Red },
    { text: '项目 2', color: Color.Blue },
    { text: '项目 3', color: Color.Green },
    { text: '项目 4', color: Color.Orange }
  ]
  
  build() {
    Grid() {
      ForEach(this.items, (item: {text: string, color: Color}) => {
        GridItem() {
          Text(item.text)
            .width('100%')
            .height(100)
            .backgroundColor(item.color)
            .fontColor(Color.White)
            .fontSize(16)
            .fontWeight(FontWeight.Bold)
            .textAlign(TextAlign.Center)
            .borderRadius(8)
        }
        .margin(4)
      })
    }
    .columnsTemplate('1fr 1fr')
    .rowsTemplate('100vp 100vp')
    .columnsGap(8)
    .rowsGap(8)
    .padding(16)
    .width('100%')
    .height('100%')
  }
}

8. 数据绑定对比

绑定方式 Android传统开发 Android Compose HarmonyOS ArkUI 说明
单向绑定 手动设置UI State读取 @State/@Prop 数据到视图
双向绑定 DataBinding(已废弃) 回调函数 + State @Link 视图与数据同步
列表绑定 Adapter模式 LazyColumn + items() LazyForEach 动态列表数据
条件渲染 View.setVisibility() if/when 表达式 if/else 语句 条件显示组件
循环渲染 手动创建View forEach/items ForEach 批量创建组件
数据观察 Observer模式 collectAsState @Watch 数据变化监听
计算属性 手动计算 derivedStateOf @Computed 派生状态计算
动态更新 手动调用更新方法 状态变化自动重组 状态变化自动更新 响应式更新机制
事件绑定 setOnClickListener() onClick参数 onClick属性 事件处理绑定

数据绑定代码示例

1. 单向绑定

Android传统开发:

java 复制代码
public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private String userName = "张三";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = findViewById(R.id.textView);
        // 手动设置UI
        textView.setText(userName);
    }
    
    private void updateUserName(String newName) {
        userName = newName;
        // 手动更新UI
        textView.setText(userName);
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun UserProfile() {
    var userName by remember { mutableStateOf("张三") }
    
    Column {
        // State读取,自动绑定
        Text(text = userName)
        
        Button(
            onClick = { userName = "李四" }
        ) {
            Text("更新姓名")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct UserProfile {
  @State userName: string = '张三'
  
  build() {
    Column({ space: 16 }) {
      // @State自动绑定
      Text(this.userName)
        .fontSize(18)
      
      Button('更新姓名')
        .onClick(() => {
          this.userName = '李四'
        })
    }
    .padding(16)
  }
}
2. 双向绑定

Android传统开发:

java 复制代码
// 使用TextWatcher实现双向绑定
public class EditActivity extends AppCompatActivity {
    private EditText editText;
    private String inputText = "";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit);
        
        editText = findViewById(R.id.editText);
        editText.setText(inputText);
        
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                inputText = s.toString();
            }
            // ... 其他方法
        });
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun EditForm() {
    var inputText by remember { mutableStateOf("") }
    
    Column {
        // 双向绑定:回调函数 + State
        TextField(
            value = inputText,
            onValueChange = { inputText = it },
            label = { Text("输入内容") }
        )
        
        Text("当前输入:$inputText")
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct EditForm {
  @State inputText: string = ''
  
  build() {
    Column({ space: 16 }) {
      // @Link实现双向绑定
      TextInput({ placeholder: '输入内容' })
        .onChange((value: string) => {
          this.inputText = value
        })
      
      Text(`当前输入:${this.inputText}`)
    }
    .padding(16)
  }
}
3. 列表绑定

Android传统开发:

java 复制代码
public class ListActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private UserAdapter adapter;
    private List<User> userList;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        
        recyclerView = findViewById(R.id.recyclerView);
        userList = getUserList();
        
        // Adapter模式
        adapter = new UserAdapter(userList);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }
    
    private void updateList(List<User> newList) {
        userList.clear();
        userList.addAll(newList);
        adapter.notifyDataSetChanged();
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun UserList() {
    var userList by remember { mutableStateOf(getUserList()) }
    
    // LazyColumn + items()
    LazyColumn {
        items(userList) { user ->
            UserItem(
                user = user,
                onDelete = { 
                    userList = userList.filter { it.id != user.id }
                }
            )
        }
    }
}

@Composable
fun UserItem(user: User, onDelete: () -> Unit) {
    Row(
        modifier = Modifier.fillMaxWidth().padding(8.dp),
        horizontalArrangement = Arrangement.SpaceBetween
    ) {
        Text(user.name)
        Button(onClick = onDelete) {
            Text("删除")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct UserList {
  @State userList: User[] = this.getUserList()
  
  build() {
    Column() {
      // LazyForEach动态列表
      List({ space: 8 }) {
        LazyForEach(this.userList, (user: User) => {
          ListItem() {
            this.UserItem(user)
          }
        }, user => user.id.toString())
      }
    }
  }
  
  @Builder UserItem(user: User) {
    Row() {
      Text(user.name)
        .layoutWeight(1)
      
      Button('删除')
        .onClick(() => {
          this.userList = this.userList.filter(u => u.id !== user.id)
        })
    }
    .width('100%')
    .padding(8)
  }
  
  private getUserList(): User[] {
    return [
      { id: 1, name: '张三' },
      { id: 2, name: '李四' }
    ]
  }
}
4. 条件渲染

Android传统开发:

java 复制代码
public class ConditionalActivity extends AppCompatActivity {
    private TextView messageView;
    private Button toggleButton;
    private boolean isVisible = true;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conditional);
        
        messageView = findViewById(R.id.messageView);
        toggleButton = findViewById(R.id.toggleButton);
        
        toggleButton.setOnClickListener(v -> {
            isVisible = !isVisible;
            // View.setVisibility()控制显示隐藏
            messageView.setVisibility(isVisible ? View.VISIBLE : View.GONE);
            toggleButton.setText(isVisible ? "隐藏" : "显示");
        });
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun ConditionalView() {
    var isVisible by remember { mutableStateOf(true) }
    
    Column {
        // if表达式条件渲染
        if (isVisible) {
            Text(
                text = "这是条件显示的内容",
                modifier = Modifier.padding(16.dp)
            )
        }
        
        Button(
            onClick = { isVisible = !isVisible }
        ) {
            Text(if (isVisible) "隐藏" else "显示")
        }
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct ConditionalView {
  @State isVisible: boolean = true
  
  build() {
    Column({ space: 16 }) {
      // if/else语句条件渲染
      if (this.isVisible) {
        Text('这是条件显示的内容')
          .padding(16)
          .backgroundColor(Color.Gray)
      }
      
      Button(this.isVisible ? '隐藏' : '显示')
        .onClick(() => {
          this.isVisible = !this.isVisible
        })
    }
    .padding(16)
  }
}
5. 数据观察

Android传统开发:

java 复制代码
public class ObserverActivity extends AppCompatActivity {
    private TextView statusView;
    private UserViewModel viewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_observer);
        
        statusView = findViewById(R.id.statusView);
        viewModel = new ViewModelProvider(this).get(UserViewModel.class);
        
        // Observer模式监听数据变化
        viewModel.getUserStatus().observe(this, status -> {
            statusView.setText(status);
        });
    }
}

public class UserViewModel extends ViewModel {
    private MutableLiveData<String> userStatus = new MutableLiveData<>();
    
    public LiveData<String> getUserStatus() {
        return userStatus;
    }
    
    public void updateStatus(String status) {
        userStatus.setValue(status);
    }
}

Android Compose:

kotlin 复制代码
@Composable
fun ObserverView(viewModel: UserViewModel = viewModel()) {
    // collectAsState监听数据变化
    val userStatus by viewModel.userStatus.collectAsState()
    
    Column {
        Text("状态:$userStatus")
        
        Button(
            onClick = { viewModel.updateStatus("在线") }
        ) {
            Text("更新状态")
        }
    }
}

class UserViewModel : ViewModel() {
    private val _userStatus = MutableStateFlow("离线")
    val userStatus: StateFlow<String> = _userStatus.asStateFlow()
    
    fun updateStatus(status: String) {
        _userStatus.value = status
    }
}

HarmonyOS ArkUI:

typescript 复制代码
@Entry
@Component
struct ObserverView {
  @State userStatus: string = '离线'
  
  // @Watch监听数据变化
  @Watch('onStatusChange')
  @State watchedStatus: string = '离线'
  
  onStatusChange() {
    console.log(`状态变化:${this.watchedStatus}`)
  }
  
  build() {
    Column({ space: 16 }) {
      Text(`状态:${this.userStatus}`)
      
      Button('更新状态')
        .onClick(() => {
          this.userStatus = '在线'
          this.watchedStatus = '在线'
        })
    }
    .padding(16)
  }
}

9. 性能优化对比

优化维度 Android传统开发 Android Compose HarmonyOS ArkUI 技术要点
布局优化 减少嵌套层级 - - 避免过度绘制
列表优化 RecyclerView复用 LazyColumn + key LazyForEach + key 虚拟化滚动
内存优化 手动管理生命周期 DisposableEffect aboutToDisappear 资源清理
重绘优化 invalidate()控制 remember/key() @State稳定性 避免不必要重绘
状态优化 手动缓存计算结果 derivedStateOf @Computed 计算状态缓存
动画优化 ValueAnimator Animatable 属性动画 流畅动画效果
启动优化 Application优化 - - 应用启动速度
副作用优化 手动管理异步操作 LaunchedEffect作用域 生命周期管理 副作用生命周期管理

10. 开发体验对比

开发维度 Android传统开发 Android Compose HarmonyOS ArkUI 优势对比
开发语言 Java/Kotlin Kotlin ArkTS(TypeScript扩展) 类型安全 + 现代语法
IDE支持 Android Studio Android Studio DevEco Studio 专业开发环境
热重载 Instant Run Live Edit 热重载 快速开发调试
预览功能 Layout Preview @Preview注解 @Preview装饰器 可视化开发
调试工具 Debugger + Profiler Layout Inspector 组件树查看器 UI结构分析
代码提示 智能补全 智能补全 ArkTS语法提示 开发效率提升
学习曲线 较低 中等 中等 上手难度
开发效率 中等 代码简洁度
文档生态 非常成熟 丰富的社区资源 官方文档完善 学习资源

11. 迁移建议

11.1 从传统Android到Compose的迁移

  1. 思维转换

    • 从命令式编程转向声明式编程
    • 从手动UI更新转向状态驱动UI
    • 从View层次结构转向组合函数
  2. 技术迁移

    • XML布局 → @Composable函数
    • findViewById → 状态管理
    • Adapter模式 → LazyColumn + items
    • 手动事件处理 → 函数参数
  3. 学习重点

    • 掌握remember和mutableStateOf
    • 理解重组机制
    • 学习Modifier系统
    • 掌握导航组件

11.2 从传统Android到HarmonyOS ArkUI的迁移

  1. 语言转换

    • 从Java/Kotlin转向ArkTS
    • 学习TypeScript语法特性
    • 适应装饰器语法
  2. 架构转换

    • Activity/Fragment → Page/Component
    • View系统 → ArkUI组件
    • Intent导航 → Router API
  3. 开发环境

    • Android Studio → DevEco Studio
    • Gradle → 鸿蒙构建系统
    • Android SDK → HarmonyOS SDK

11.3 从Compose到HarmonyOS ArkUI的迁移

  1. 语言适应

    • Kotlin → ArkTS
    • 函数式组件 → 结构体组件
    • 类型系统差异
  2. 概念映射

    • @Composable → @Component
    • remember → @State
    • LazyColumn → List + ForEach
    • NavHost → Router
  3. 开发工具

    • Android Studio → DevEco Studio
    • Layout Inspector → 组件树查看器
    • Live Edit → 热重载

11.4 三方技术对比总结

对比维度 Android传统开发 Android Compose HarmonyOS ArkUI
学习难度
开发效率
代码维护性
性能表现
生态成熟度 非常高
未来发展 维护模式 主流方向 新兴技术

11.5 学习路径建议

  1. 传统Android开发者

    • 先学习Compose,理解声明式UI
    • 再学习ArkUI,利用相似概念快速上手
    • 重点关注状态管理和组件化思维
  2. 新手开发者

    • 建议直接学习Compose或ArkUI
    • 跳过传统Android开发的复杂性
    • 培养现代UI开发思维
  3. 跨平台需求

    • 同时掌握Compose和ArkUI
    • 理解两者的设计差异
    • 建立统一的开发模式
  4. 持续学习

    • 关注技术发展趋势
    • 参与社区讨论
    • 实践项目验证
相关推荐
雨白2 小时前
Java 多线程指南:从基础用法到线程安全
android·java
00后程序员张3 小时前
详细解析苹果iOS应用上架到App Store的完整步骤与指南
android·ios·小程序·https·uni-app·iphone·webview
程序员江同学4 小时前
ovCompose + AI 开发跨三端的 Now in Kotlin App
android·kotlin·harmonyos
2501_915106324 小时前
Xcode 上传 ipa 全流程详解 App Store 上架流程、uni-app 生成 ipa 文件上传与审核指南
android·macos·ios·小程序·uni-app·iphone·xcode
消失的旧时光-19435 小时前
Kotlinx.serialization 使用讲解
android·数据结构·android jetpack
猛码Memmat5 小时前
华为HarmonyOS开发文档
华为·harmonyos
灿烂阳光g6 小时前
SELinux 策略文件编写
android·linux