Intent での画面切り替えについて

944 views
Skip to first unread message

杉田臣輔

unread,
Jun 30, 2011, 8:30:44 PM6/30/11
to android-g...@googlegroups.com
こんにちは

Intent での画面切り替えをすると挙動がおかしくなるきがします。
クラス名や名前は説明用に簡単なのに置き変えていますが、以下のとおりです。

ASceneとBSceneの画面を行き来したい。
それぞれにボタンが設置してあり、押すときにIntentを生成してstartActivityする。

ASceneとBSceneの往復を繰り返すうちに挙動がおかしくなる。

・layoutフォルダ内
AScene用の「a.xml」の「Button」タグへ「android:onClick="buttonGotoB"」というBSceneにい行くためのボタンを
AScene用の「b.xml」の「Button」タグへ「android:onClick="buttonGotoA"」というASceneにい行くためのボタンを設置。
android:onClick="buttonGotoB"


Aの画面のボタンのメソッド(AScene.java)
public void buttonGotoB(View view) {
Intent i = new Intent(getApplicationContext(), AScene.class);
startActivity(i);
}

Bの画面のボタンのメソッド(BScene.java)
public void buttonGotoA(View view) {
Intent i = new Intent(getApplicationContext(), BScene.class);
startActivity(i);
}

------------

毎回IntentがNewされているからだと思いますが、画面が切り替わったときに、メモリは解放されないのでしょうか?
startActivityに対して、killActivityとかstopActivityみたいなのもありませんでした。
よろしくお願いします。

yoshim

unread,
Jul 1, 2011, 1:56:15 AM7/1/11
to 日本Androidの会
finish()を使えばActivityをcloseすることができます。

これをオーバーライドしたonPauseあたりに実装すれば、
Aの画面→Bの画面と切り替わったときにAの画面のActivityが終了できます。

@Override
public void onPause() {
super.onPause();
finish();

shinriyo

unread,
Jul 1, 2011, 4:20:45 AM7/1/11
to 日本Androidの会
yoshimさん

ありがとうございます。
変な挙動にならなくなりましたので、うまくいった感じになりました。

shinriyo

unread,
Jul 13, 2011, 1:43:00 AM7/13/11
to android-g...@googlegroups.com
こんにちは。shinriyoです。

Intent での画面切り替えを使用しており、
onPauseにてfinish()を実装したところうまくいくように見えました。

しかし、実機で確認してみると、一瞬デスクトップが表示されてしまいます。
切り替え後に切り替え前のIntentをfinishさせることは可能でしょうか?

sabaku

unread,
Jul 13, 2011, 2:53:01 AM7/13/11
to 日本Androidの会
こんにちはsabakuです。

B画面からA画面に遷移するというより、A画面に戻る動作の方が良いのではないでしょうか?
この場合、Bの画面のボタンのメソッド内でfinish()を呼び出すことで、
A画面に戻ることが出来ます。

shinriyo

unread,
Jul 13, 2011, 4:01:59 AM7/13/11
to android-g...@googlegroups.com
sabakuさん

返信ありがとうございます。

> B画面からA画面に遷移するというより、A画面に戻る動作の方が良いのではないでしょうか? 
Aの画面のアクティビティが生きたままにするということですね?
しかし、B画面からC画面があった場合に、Aの画面が間に出るかもしれません。

sabaku

unread,
Jul 13, 2011, 8:06:12 PM7/13/11
to 日本Androidの会
> Aの画面のアクティビティが生きたままにするということですね?
> しかし、B画面からC画面があった場合に、Aの画面が間に出るかもしれません。
では、A画面からB画面に遷移し、C画面に遷移したい場合は、
一度A画面に戻ってからC画面を呼び出すのはどうでしょうか?

流れ的には、
A画面のボタンイベントでstartActivityForResult()でB画面を呼び出します。
B画面をfinish()を呼び出して一度終了し、
A画面のonActivityResult()でB画面の終了を確認してから、
C画面をstartActivityForResult()で呼ぶ仕組みになりますが、どうでしょうか?
この場合もA画面は生きたままになってしまいますが。。。

Tetsuro Nakamura

unread,
Jul 13, 2011, 10:05:35 PM7/13/11
to android-g...@googlegroups.com
t2lowと申します。

Intentのフラグで FLAG_ACTIVITY_REORDER_TO_FRONT というものがあります。
これを使えば履歴に同じActivityがあるとき、そのActivityを最前面に表示するようになります。
期待の動作かどうかはわかりませんが、ご参考まで。

以上です。


2011年7月14日9:06 sabaku <testi...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

Reply all
Reply to author
Forward
0 new messages