私の Android アプリには 2 つのアクティビティがあります。Java で記述された FrontEnd と、NativeActivity であるゲームです。Android NDK サンプル (samples\native-activity\jni\main.c) を参考にして、ゲームのメイン C++ モジュールを作成しました。ユーザーが Game から FrontEnd に戻りたい場合は、 を呼び出しますANativeActivity_finish(g_state->activity)
。その後、私が観察したことは次のとおりです。
APP_CMD_TERM_WINDOW
engine_handle_cmd
コールバックに入る- 私は電話で反応し
engine_term_display
ます(サンプルのように) - FrontEnd アクティビティが表示されます。そして、「プレイ」ボタンを押すと、ゲームが再び起動しますが、待ち続けます....
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 の間でフロントエンドからゲームを再起動すると、新しいアクティビティではなく「瀕死の」アクティビティが開始されます。
APP_CMD_TERM_WINDOW と APP_CMD_STOP の間で何が起こっているのか、なぜそんなに時間がかかるのかわかりません。同じアーキテクチャの別のアプリがあり、ステップ 3 と 4 の間で約 0.3 秒かかります。最初のアプリで GC にもっと多くの仕事があるかもしれません...わかりません。だから私の質問は:
- NativeActivity が終了プロセスを完了するのに非常に時間がかかるのは正常ですか?
- ユーザーがフロントエンドからゲームを再起動したときに、ダイイング アクティビティが発生しないようにするにはどうすればよいですか?
アップデート
私は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の間です。
グーグルで調べたところ、このメッセージは「危険ではない」と見なされていることがわかりましたが、何か説明できるでしょうか?