NDK为我们提供了胶水层android_native_app_glue,但我们现在要抛弃它,我们能够有一个更简单更有效率的玩法。替换思路如下:
- 直接使用ANativeActivity事件回调,放弃使用Looper的方案
- input.h和senor.h提供的接口中,必须使用Looper,所以还是会初始化一个Looper
- Looper使用回调函数模式
首先,ANativeActivity提供的回调函数,我们全部挂载上,这里的事件属于主线程事件,来自于java代码回调。我们还是会自己启动一个线程,完全控制执行逻辑。
void ANativeActivity_OnCreate(ANativeActivity* activity, void* savedState, size_t savedStateSize)
{
ALog_D("ANativeActivity_onCreate OnCreate");
activity->callbacks->onStart = OnStart;
activity->callbacks->onResume = OnResume;
// activity->callbacks->onSaveInstanceState = OnSaveInstanceState;
activity->callbacks->onPause = OnPause;
activity->callbacks->onStop = OnStop;
activity->callbacks->onDestroy = OnDestroy;
activity->callbacks->onWindowFocusChanged = OnWindowFocusChanged;
activity->callbacks->onNativeWindowCreated = OnNativeWindowCreated;
activity->callbacks->onNativeWindowResized = OnNativeWindowResized;
activity->callbacks->onNativeWindowRedrawNeeded = OnNativeWindowRedrawNeeded;
activity->callbacks->onNativeWindowDestroyed = OnNativeWindowDestroyed;
activity->callbacks->onInputQueueCreated = OnInputQueueCreated;
activity->callbacks->onInputQueueDestroyed = OnInputQueueDestroyed;
activity->callbacks->onContentRectChanged = OnContentRectChanged;
activity->callbacks->onConfigurationChanged = OnConfigurationChanged;
activity->callbacks->onLowMemory = OnLowMemory;
/*
if (savedState)
{
AData->savedState = malloc(savedStateSize);
AData->savedStateSize = savedStateSize;
memcpy(AData->savedState, savedState, savedStateSize