我的android應用程序有兩個活動:用Java和GameActivity編寫的FrontEnd,它是NativeActivity。我使用Android NDK示例(samples \ native-activity \ jni \ main.c)作爲創建遊戲的主要C++模塊的參考。當用戶想從遊戲返回到FrontEnd時,我打電話ANativeActivity_finish(g_state->activity)
。我之後觀察如下:從本機活動返回的android需要太長時間
APP_CMD_TERM_WINDOW
進入engine_handle_cmd
回調- 我通過調用
engine_term_display
(就像樣本)出現 - 前端活性反應。我可以按「播放」按鈕,從而再次啓動遊戲,但我一直在等待....
APP_CMD_STOP
進入engine_handle_cmd
回調APP_CMD_DESTROY
進入engine_handle_cmd
回調if (state->destroyRequested != 0)
火災main.cpp中的主循環- 就像在樣本中,
android_main
返回。現在,最後再次啓動遊戲是安全的...
我想強調步驟3和步驟4之間的時間間隔約爲10秒(至少在DEBUG模式下)!如果我在步驟3和步驟4之間從FrontEnd重新啓動遊戲,它將啓動「垂死」活動而不是新遊戲。
我不知道APP_CMD_TERM_WINDOW和APP_CMD_STOP之間會發生什麼,爲什麼它需要這麼長時間。我有另一個具有相同體系結構的應用程序,步驟3和步驟4之間需要大約0.3秒。也許GC在第一個應用程序中有更多工作要做......我不知道。所以我的問題是:
- NativeActivity花了這麼長時間來完成其整理過程是正常的嗎?
- 當用戶從FrontEnd重新開始遊戲時,我該如何防止遇到垂死的活動?
更新
我在logcat中得到:
05-29 18:27:17.729:W/ActivityManager(476):啓動超時已過期,放棄喚醒鎖! 05-29 18:27:17.739:W/ActivityManager(476):爲ActivityRecord {4209b2d0 U0 blah.blah.MainActivity}
只是步驟3和4
之間活動空閒超時已經一派,我發現這條消息被認爲是「非危險的」,但也許它可以解釋任何事情?