Android でネイティブ ゲームと Java アプリケーションを統合する際に、少し奇妙な問題があります。
ゲームのネイティブ .so ファイルを追加し、それを標準のアクティビティでラップして、スプラッシュ スクリーン、メニュー、その他のものを表示する必要があります。
ネイティブ コード内に kill プロセス呼び出しがあるように見えます。これはlogcatで確認できます。
0x00000000 (code=1) の致命的なシグナル 11 (SIGSEGV)
これに続いて
DEBUG/Zygote(119): プロセス 28720 がシグナルによって終了しました (11)
これは、ネイティブ ゲームで終了オプションを押したときに発生します。これが発生すると、アプリケーションが再起動されます。つまり、マニフェストでランチャーとして設定されたアクティビティが新しいプロセスで作成されます。アクティビティマネージャーがプロセスが停止したことを記録し、これを行うことを logcat で確認します。
INFO/ActivityManager(192): アクティビティ my.package.name/my.launcher.Activity のプロシージャ my.package.name を開始します: pid=28820 uid=10061 gids={3003, 1015}
残念ながら、ネイティブ ソースを入手できず、変更もできません。
これまでに思いついた最善の解決策は、onCreate で何らかのチェックを行い、アプリが再起動されたと思われる場合は終了を呼び出すことです。しかし、私はそれを行うという考えが本当に好きではないので、今ここに投稿しています.
これを処理する「良い」方法について何か提案はありますか? 私の提案したソリューションを引き裂くことも大歓迎です。
これは標準的な問題ではないと思うので、フレームワークはおそらくここで私を助けることはあまりありません. ドキュメントを読んだり、Android で開発したりするのに何時間も費やしたにもかかわらず、私はまだ Android の専門家ではありません。
編集:
注意点として、この動作は 2 つのアクティビティを作成することで再現できます。最初のものは 2 番目のものを起動する必要があります。2 番目のアクティビティには、呼び出しボタンなどのアプリケーション プロセスを強制終了する方法が必要です。
android.os.Process.killProcess(pid);
したがって、アクティビティ A がマニフェストのランチャー アクティビティである場合。A は B を開始します。B はプロセスを強制終了します。A は、別のプロセスで Android OS によって自動的に開始されます。
これは、自分が行っていることが再起動を引き起こしているかどうかを確認するためのテストとして行いました。このテストは、マニフェストを編集したり追加のコードを追加したりすることなく、説明どおりです。再起動は必ず発生します。それが起こらないようにする方法を見つけることができればいいのにと思います。