【NativeActivity介绍】

官方文档

API介绍:https://developer.android.com/reference/android/app/NativeActivity
官方Demo:https://github.com/android/ndk-samples/tree/master/native-activity

NativeActivity是基于Activity的页面,有Activity的全部功能。除此之外,NativeActivity通过loadNativeCode方法实现了一套自有looper事件处理逻辑。

mNativeHandle = loadNativeCode(path, funcname, Looper.myQueue(),
                getAbsolutePath(getFilesDir()), getAbsolutePath(getObbDir()),
                getAbsolutePath(getExternalFilesDir(null)),
                Build.VERSION.SDK_INT, getAssets(), nativeSavedState,
                classLoader, classLoader.getLdLibraryPath());

mNativeHandle为long指针,指向C++侧对应的ANativeActivity对象,包含了messageQueue和surface等信息。messagequeue是为了处理activityfinish等消息。C++和JAVA侧通过Surface和InputQueue联系

    public void surfaceCreated(SurfaceHolder holder) {
        if (!mDestroyed) {
            mCurSurfaceHolder = holder;
            onSurfaceCreatedNative(mNativeHandle, holder.getSurface());
        }
    }
    public void onInputQueueCreated(InputQueue queue) {
        if (!mDestroyed) {
            mCurInputQueue = queue;
            onInputQueueCreatedNative(mNativeHandle, queue.getNativePtr());
        }
    }

上面的loadNativeCode最终会在C++侧创建一个子线程并且loop()起来,而且会处理主线程消息。消息分为两类:

  1. 生命周期以及窗口创建,inputqueue创建等消息,也叫cmd消息
  2. 点击事件消息,也叫input消息

使用looper.addFd()监听消息

//先监听cmd消息,looper为子线程looper,android_app为主线程传递过来的对象,msgread为主线程创建,LOOPER_ID_MAIN为主线程事件(除了点击事件),cmdPollSource表示监听回调事件
ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL, &android_app->cmdPollSource);
//INPUTQUEUE创建后再监听input事件,looper为子线程looper,mDispatchReadFd为主线程传递过来的对象,LOOPER_ID_INPUT为主线程下发的点击事件,inputPollSource表示监听回调事件
AInputQueue_attachLooper(android_app->inputQueue,android_app->looper, LOOPER_ID_INPUT, NULL, &android_app->inputPollSource);
	inputQueue->attachLooper(l, ident, callback, data);
		looper->addFd(mDispatchReadFd, LOOPER_ID_INPUT, ALOOPER_EVENT_INPUT, callback, data);

c++可以通过onAppCmd()和onInputEvent()来实现逻辑

类图:

NativeActivity类图
时序图
时序图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 是 Facebook 开发的一种跨平台移动应用开发框架,它使用 React.js 的语法和组件模型来构建 iOS 和 Android 平台上的原生应用。与传统的混合式移动应用开发框架相比,React Native 可以更好地实现性能优化和原生用户体验。 React Native 的主要特点如下: 1. 跨平台:使用相同的代码库可以同时构建 iOS 和 Android 应用程序。 2. 原生性能:React Native 使用原生控件来渲染应用程序,从而实现原生性能。 3. 组件化:React Native 使用组件化来构建应用程序,使得应用程序更易于维护和扩展。 4. 热更新:React Native 支持热更新,可以在不重新编译应用程序的情况下更新应用程序功能。 5. 社区支持:React Native 有庞大的社区支持,可以获得许多开源组件和库。 React Native 的用法如下: 1. 安装 React Native:使用 npm 安装 React Native 命令行工具。 ```bash npm install -g react-native-cli ``` 2. 创建 React Native 项目:使用 react-native 命令创建一个新的 React Native 项目。 ```bash react-native init MyProject ``` 3. 运行 React Native 项目:在项目目录中执行以下命令启动 React Native 应用程序。 ```bash cd MyProject react-native run-ios // 运行 iOS 应用程序 react-native run-android // 运行 Android 应用程序 ``` 4. 编写 React Native 组件:在项目中创建一个新的组件,使用 JSX 语法编写组件的 UI。 ```jsx import React, { Component } from 'react'; import { Text, View } from 'react-native'; export default class MyComponent extends Component { render() { return ( <View> <Text>Hello, React Native!</Text> </View> ); } } ``` 5. 在应用程序中使用组件:在应用程序中引入组件并使用它。 ```jsx import React, { Component } from 'react'; import { AppRegistry } from 'react-native'; import MyComponent from './MyComponent'; export default class MyApp extends Component { render() { return ( <MyComponent /> ); } } AppRegistry.registerComponent('MyApp', () => MyApp); ``` 以上就是 React Native 的简单介绍和用法。React Native 的学习曲线可能会比较陡峭,但是掌握后可以大大提高移动应用开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值