例外発生時のアプリ終了について

829 views
Skip to first unread message

大神戌一

unread,
Nov 26, 2011, 4:00:35 AM11/26/11
to 日本Androidの会
始めまして。大神戌一と申します。

アプリ実行中に例外が発生して強制終了した時、全てのアクティビティがスタックから取り除かれずに再開されてしまうため困っています。
途中から開始することなく、最初から始めるにはどうすれば良いでしょうか。
色々調べてみたのですが、どこもアプリが終了するとしか書かれておらずこちらに書かせてもらいました。
(UncaughtExceptionHandlerあたりで何かしらすれば良いとは思うのですが、、、)

機種:
GALAXY Tab SC-01C (Android 2.3.3)

現象:
例外が発生した時、現在表示されているアクティビティと呼び出し元のアクティビティのみスタックから取り除かれる。
それより前に呼ばれたアクティビティは破棄されるもスタックに詰まれたままとなっている。

アクティビティA、B、C、D、Eとあるとき
・A→B→C→D→E の時に例外が発生した時 A→B→C になる
・A→B→C→(D)→E でDをE遷移時に破棄した後で例外が発生した時 A→B→C になる
この時、CからBに戻ったとき、BのライフサイクルはonCreateから始まる(Aも同様)


以上、宜しく御願いします。

saramakkuro

unread,
Feb 2, 2012, 8:53:29 PM2/2/12
to android-g...@googlegroups.com
saramakkuroと申します。
提案方法の1つです。

別クラスにフラグを用意して、
1.破棄されたときにそいつのフラグを切り替える
2.各アクティヴィティのonResume()でその状態を引き取って破棄

こんな感じでいかがでしょうか。

2011年11月26日18:00 大神戌一 <wan20...@hotmail.com>:

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

大神戌一

unread,
Feb 14, 2012, 9:08:44 AM2/14/12
to 日本Androidの会
saramakkuroさん、提案ありがとうございます。
そして返信遅くなってすみません。

あれから色々調べてもコレといった対応策が見つからなかったので
提案と同じように開始時にstatic変数にフラグを持たせて落ちていたら finish() する処理で対応しています。

想定どおりの動作はするのですが、全てのアクティビティにこの処理を入れなければならず
ソースを見るとこの対応で本当にいいのだろうか?と疑問に思ったのでこちらに書かせていただきました。

On 2月3日, 午前10:53, saramakkuro <saramakk...@gmail.com> wrote:
> saramakkuroと申します。
> 提案方法の1つです。
>
> 別クラスにフラグを用意して、
> 1.破棄されたときにそいつのフラグを切り替える
> 2.各アクティヴィティのonResume()でその状態を引き取って破棄
>
> こんな感じでいかがでしょうか。
>
> 2011年11月26日18:00 大神戌一 <wan2000...@hotmail.com>:
>
>
>
> > 始めまして。大神戌一と申します。
>
> > アプリ実行中に例外が発生して強制終了した時、全てのアクティビティがスタックから取り除かれずに再開されてしまうため困っています。
> > 途中から開始することなく、最初から始めるにはどうすれば良いでしょうか。
> > 色々調べてみたのですが、どこもアプリが終了するとしか書かれておらずこちらに書かせてもらいました。
> > (UncaughtExceptionHandlerあたりで何かしらすれば良いとは思うのですが、、、)
>
> > 機種:
> > GALAXY Tab SC-01C (Android 2.3.3)
>
> > 現象:
> >例外が発生した時、現在表示されているアクティビティと呼び出し元のアクティビティのみスタックから取り除かれる。
> > それより前に呼ばれたアクティビティは破棄されるもスタックに詰まれたままとなっている。
>
> > アクティビティA、B、C、D、Eとあるとき
> > ・A→B→C→D→E の時に例外が発生した時 A→B→C になる
> > ・A→B→C→(D)→E でDをE遷移時に破棄した後で例外が発生した時 A→B→C になる
> > この時、CからBに戻ったとき、BのライフサイクルはonCreateから始まる(Aも同様)
>
> > 以上、宜しく御願いします。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

yuki312

unread,
Feb 15, 2012, 9:13:26 AM2/15/12
to 日本Androidの会
yukiと申します。

提案となりますが、IntentにFLAG_ACTIVITY_CLEAR_TOPを追加してルートアクティビティを
起動するのではだめでしょうか?

saramakkuro

unread,
Feb 17, 2012, 7:52:13 PM2/17/12
to android-g...@googlegroups.com
saramakkuroです。
大神戌一さん
> 全てのアクティビティにこの処理を入れなければならず
onResumeで処理するこの方法であれば、私ならスーパークラスのActivitiy
に記述し、そいつをextendします。それならサブクラス自体に記述する必要ないです。

yukiさんの提案のintentでトップに飛ばす方法であればかなりすっきりしますね。知らなかったです。勉強になります。


2012年2月15日23:13 yuki312 <defin...@gmail.com>:
> yukiと申します。
>
> 提案となりますが、IntentにFLAG_ACTIVITY_CLEAR_TOPを追加してルートアクティビティを
> 起動するのではだめでしょうか?

大神戌一

unread,
Feb 18, 2012, 4:53:33 AM2/18/12
to 日本Androidの会
大神戌一です。

>yukiさん
FLAG_ACTIVITY_CLEAR_TOPでルートアクティビティを呼ぶ方法は良いですね。
finishでアクティビティを1つずつ終了していくより速度的にこちらの方が早いので使おうと思います。

>saramakkuroさん
なるほど、Activityを継承して独自のActivityを作れば良いのですね。
というわけで、下のような動きにしてみました

起動
→次のアクティビティを呼び出すときにstatic変数のフラグをオン
 →アプリの処理
  →例外(フラグがオフになる)
   →アプリ再開時に独自Activity内でFLAG_ACTIVITY_CLEAR_TOPを設定してルートを呼ぶ



ありがとうございました。
Reply all
Reply to author
Forward
0 new messages