【问题标题】:Handle main commands in android native activity处理android原生活动中的主要命令
【发布时间】:2012-08-02 22:51:22
【问题描述】:

在 android 原生活动中,您可以用自己的方法处理来自系统的主要命令。我知道该怎么做,但我不知道我能处理的所有状态。我知道很少有像 APP_CMD_SAVE_STATE、APP_CMD_INIT_WINDOW 这样的状态......但这还不是全部。我在任何地方都找不到状态列表或 android_native_app_glue.h 头文件。有人可以推荐我或用他们的号码和他们打电话的时间写下事件列表吗?
谢谢

void CMDMethod(struct android_app* app, int32_t state)
{
   switch(state)
   {
     case APP_CMD_SAVE_STANE: //some code
                              break;
     //what can be next cases?
   }
}

void android_main(struct android_app* state)
{
   state->onAppCmd = CMDMethod;
}

【问题讨论】:

    标签: android c++ c native-code native-activity


    【解决方案1】:

    这是在 android_native_app_glue.h 中找到的枚举

    enum {
    
        APP_CMD_INPUT_CHANGED,
    
        APP_CMD_INIT_WINDOW,
    
        APP_CMD_TERM_WINDOW,
    
        APP_CMD_WINDOW_RESIZED,
    
        APP_CMD_WINDOW_REDRAW_NEEDED,
    
        APP_CMD_CONTENT_RECT_CHANGED,
    
        APP_CMD_GAINED_FOCUS,
    
        APP_CMD_LOST_FOCUS,
    
        APP_CMD_CONFIG_CHANGED,
    
        APP_CMD_LOW_MEMORY,
    
        APP_CMD_START,
    
        APP_CMD_RESUME,
    
        APP_CMD_SAVE_STATE,
    
        APP_CMD_PAUSE,
    
        APP_CMD_STOP,
    
        APP_CMD_DESTROY,
    
    };
    

    APP_CMD_INPUT_CHANGED - 来自主线程的命令:AInputQueue 已更改。处理此命令后,android_app->inputQueue 将更新为新队列(或 NULL)。

    APP_CMD_INIT_WINDOW - 来自主线程的命令:一个新的 ANativeWindow 可供使用。收到此命令后,android_app->window 将包含新的窗口表面。

    APP_CMD_TERM_WINDOW - 来自主线程的命令:需要终止现有的 ANativeWindow。收到此命令后,android_app->window 仍然包含现有窗口;调用 android_app_exec_cmd 后会被设置为 NULL。

    APP_CMD_WINDOW_RESIZED - 来自主线程的命令:当前 ANativeWindow 已调整大小。请用新尺寸重新绘制。

    APP_CMD_WINDOW_REDRAW_NEEDED - 来自主线程的命令:系统需要重绘当前的 ANativeWindow。您应该在将它交给 android_app_exec_cmd() 之前重绘窗口,以避免暂时的绘图故障。

    APP_CMD_CONTENT_RECT_CHANGED - 来自主线程的命令:窗口的内容区域已更改,例如显示或隐藏软输入窗口。您可以在 android_app::contentRect 中找到新的内容矩形。

    APP_CMD_GAINED_FOCUS - 来自主线程的命令:应用的活动窗口已获得输入焦点。

    APP_CMD_LOST_FOCUS - 来自主线程的命令:应用的活动窗口失去了输入焦点。

    APP_CMD_CONFIG_CHANGED - 来自主线程的命令:当前设备配置已更改。

    APP_CMD_LOW_MEMORY - 来自主线程的命令:系统内存不足。尽量减少内存使用。

    APP_CMD_START - 来自主线程的命令:应用的 Activity 已启动。

    APP_CMD_RESUME - 来自主线程的命令:应用程序的活动已恢复。

    APP_CMD_SAVE_STATE - 来自主线程的命令:应用程序应该为自己生成一个新的保存状态,如果需要可以稍后恢复。如果你有保存状态,用 malloc 分配它并把它放在 android_app.savedState 中,大小在 android_app.savedStateSize 中。稍后将为您释放。

    APP_CMD_PAUSE - 来自主线程的命令:应用的活动已暂停。

    APP_CMD_STOP - 来自主线程的命令:应用程序的活动已停止。

    APP_CMD_DESTROY - 来自主线程的命令:应用程序的 Activity 正在被销毁,并等待应用程序线程清理并退出,然后再继续。

    【讨论】:

    • 哇。 4年后我终于有了答案。
    【解决方案2】:

    我想我在这本书http://www.packtpub.com/android-ndk-beginners-guide/book 中看到了一些相关内容。但可能是错误的。里面肯定有一章是关于创建一个完全原生的活动,用那个循环处理所有这些状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2019-09-11
      • 2011-06-27
      • 2013-12-22
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多