Android版にて、アプリ再立ち上げ時にグローバル変数を初期化する方法はないのでしょうか?
または、後述の通りアプリ自身のプロセスを終了する手段でも良いと考えています。
以下は、アプリを立ち上げると2つの変数が高速にカウントアップされ、端末の"戻る"ボタン
を押すとアプリが終了するサンプルです。
端末の戻るボタンを押すと見かけ上はアプリが終了しますが、そのまま再度アプリを実行すると、
グローバル変数:カウントがリセットされない
ローカル変数:カウントがリセットされる
と差が生まれます。
----------
#include "DxLib.h"
int cntG = 0;
int android_main(void)
{
if( DxLib_Init() == -1 ){ return -1; }
int cntL = 0;
while( ProcessMessage() == 0 ) {
//Ecsキー(or 戻るボタン)を検出したらループから抜ける
if( CheckHitKey(KEY_INPUT_ESCAPE) == 1 ){ break; }
ClearDrawScreen();
DrawFormatString(50, 50, GetColor(255, 255, 255), "グローバル変数:%d", cntG);
DrawFormatString(50, 80, GetColor(255, 255, 255), "ローカル変数 :%d", cntL);
cntG += 1;
cntL += 1;
WaitTimer(10);
}
DxLib_End();
return 0;
}
----------
アプリ側で「DxLib_End(); ⇒ return 0;」を呼ぶとホーム画面には戻るものの、起動中の
アプリリストを開くと裏ではアプリのプロセスが残った状態になっています。
裏でアプリのプロセスが残ったい状態のまま再度アプリを立ち上げると、android_main()関数
内は再実行されるものの、グローバル変数は初期化されないようです。
※手動でアプリリストから完全に終了すれば、再実行時はグローバル変数も初期化される。
いくら何でも、ユーザーに対して『アプリ終了時は手動でアプリリストから完全終了して
ください』と案内するのは、不自然かつ不親切なので避けたいと思います。
ひとつ思いつく方法としては、何かしらの方法でアプリ自身のプロセスを終了させる方法です。
既存アプリでも、例えばMicrosoftのEdge(Android版)では、アプリ上からアプリ自身の
プロセスを終了する機能を提供しているようですが、ネットで軽く調べてもSystem.exit()や
Activity#finish()などのそれらしい機能は見当たるものの、正しく使いこなすのはハードルが
高いと感じています。
他力本願で恐縮ですが、DXライブラリ側で(例えばEdgeのように)アプリ自身のプロセスを
終了させる手段を提供していただけると大変助かるのですが、いかがでしょうか・・・?
上記のサンプルレベルであれば、「グローバル変数を使わない」や「android_main()関数内
で再度初期化する」などの手もあるのですが、
私の身勝手な都合ではあるものの、別途Windows版で作ったものを移植する関係で、複雑な
コード全体を見直すのは現実的ではないことから、何か方法がないかご相談した次第です。
よろしくお願いします。