SoftBankブラウザ起動時の注意点(2)
以前SoftBankブラウザ起動時の注意点で説明してた、MIDlet#platformRequestを呼んだ直後に
MIDlet#notifyDestroyedを呼ぶと、ブラウザジャンプする前にアプリが終了してしまう現象のことについて。
前回はsleepを入れて回避したが、今回は別の方法で回避を試みた。
内容としては、以下のような感じ。
流れとしては、ブラウザ起動前にフラグをONにして、ブラウザ起動のAPIを呼び、フラグがOFFになるまではwhile文で無限ループする。
public final class Test extends MIDlet
{
Main c = new Main(this);// コンストラクタ
public Test() {
Display.getDisplay(this).setCurrent(c);
}// アプリの開始、再開時
public void startApp() {
c.resume();
}// アプリの停止
public void pauseApp() {
}// アプリの終了
public void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}// アプリを終了させる
public void doExit() {
try {
destroyApp(false);
notifyDestroyed();
} catch(MIDletStateChangeException e) { }
}
}class Main extends Canvas
{
private static Test a;
private static boolean lflg;// コンストラクタ
Main(Test a) {
this.a = a;
}// サイトジャンプ
private void siteJump(String url) {
lflg = true; // ループフラグをONにする// ジャンプ
try {
a.platformRequest(url);
} catch (Exception e) {
}// レジュームされるまで待つ
while (lflg);// アプリ終了
a.doExit();
}// レジューム
public void resume() {
lflg = false; // ループフラグをOFFにする
}
}
ブラウザジャンプから返ってきたときに、レジューム処理が行われ、フラグがOFFになる。
これで問題なく動作すると思っていたのですが、失敗しました。正確には一部の端末のみ失敗しました。
ブラウザ起動を行う際に、3GCのみ「ブラウザを起動します。よろしいですか?」という警告ダイアログを出します。
このときに、「いいえ」を選択した場合、一部の端末でレジューム処理に来ません。というか、その前にサスペンド処理に行っていないような気がしました。(ちゃんと調べていない)
したがって、現時点ではsleep以外に解決策が見つかっていません。