StartActivityでIntentを起動するとVMがshutdownする?

閲覧: 6,565 回
最初の未読メッセージにスキップ

Jack

未読、
2010/08/29 23:00:412010/08/29
To: 日本Androidの会
どなたかご存知でしたら教えてください。

今まで正常に動作していたアプリですが、IntentをStartActivityで起動しようとすると
画面がフリーズしたのでLogCatを見たところ、IntentをStartさせようとしたところで
ShutDownVMとメッセージが出ていました。

機能追加する前までは全く正常に動いていたので、MemoryOverかなと思っているのですが
それらしいメッセージも無く困り果てています。

機能追加もListViewとSQLiteのDBアクセスを追加しただけでこの処理は全く関係ない所で
正常に動いています。


ちなみにこのアプリActivityが12、Layoutも13ありますが、アプリ内で全て起動させたときに
起きているわけではないので、全くわからない状況です。

どなたかご存知でしたらご指導お願いします。

kazu

未読、
2010/08/29 23:49:312010/08/29
To: 日本Androidの会
問題が起きる処理の少し前にブレークポイントを設定してステップ実行して処理と変数の中身なども一行ずつ見ながら変な挙動がおきてないか確認してみたら
どうですか?

Jack

未読、
2010/08/30 1:03:012010/08/30
To: 日本Androidの会
kazuさん

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

Intent発効前にブレークポイントを設定してステップ実行して見ましたが、問題なくStartActivityは進んでいます。
Onclickのルーチンが終了するまでスムースにステップは実行しますが、Logcatを見ていると、
StartActivityメッセージとShutdownVMメッセージの間にKeyがNULLの表示が出ています。
そういえばShutDownVMの後にLayout名が不明というメッセージも出ていました。

今、開発環境の前にいないので正確なメッセージは伝えられないのですが、内部的に呼び出されるActivityに定義されている
呼び出しKeyに値が設定できない状態で、これが例外処理をおこしている原因のようです。
要はActivityを呼び出せない状況です。

ちなみにこのエラーとなるIntentを呼び出しているActivityは、別のActivityから生成されたListViewのライン選択で呼び出
した
Activityです。この呼び出されるActivityもListViewの表示を行うロジックです。

先に書いたSQLiteのDBロジック追加前までは、この現象は起きていません。
Androidのメモリ使用の詳細は解りませんが、なんとなく呼び出そうとしているActivity分のメモリエリアが取れないのかなという感じで
す。
自分の想像ですが。

実機はHT-03Aでテストしています。

心当たりありませんでしょうか。

On 8月30日, 午後12:49, kazu <kazuma.m...@gmail.com> wrote:
> 問題が起きる処理の少し前にブレークポイントを設定してステップ実行して処理と変数の中身なども一行ずつ見ながら変な挙動がおきてないか確認してみたら
> どうですか?

もちこ。

未読、
2010/08/31 3:55:472010/08/31
To: 日本Androidの会
こんにちは、もちこと申します。

何かしらのエラーが起きた時にVMがシャットダウンするのは珍しいことではありませんので、
メモリの問題と決めるのはちょっと早いかもしれませんよ。

ListViewを追加されたとのことでしたが、この追加したというのは呼び出し側にでしょうか、
それとも呼び出される側のActivityにでしょうか?
(ListViewを追加したのが呼び出し側ならIntentの引数が違ってる可能性を疑っています。
呼び出される側ならListViewの指定の仕方に問題があるのかも。)
呼び出される側のActivityは呼び出しでなく単独で起動するとき正常に表示されますでしょうか?
追加するのをDBコネクションだけにした場合、ListViewだけにした場合では?

まずは問題があるとしたら呼び出し側であるのか、呼び出される側であるのか、
DBが悪いのか、ListViewが悪いのか。
その切り分けができればご提示願います。

Jack

未読、
2010/08/31 5:45:202010/08/31
To: 日本Androidの会
もちこさん

ご指導ありがとうございます。
ご指示に従い、とりあえず切り分けしてみます。
少しめどついたらアップします。

Jack

未読、
2010/08/31 9:55:572010/08/31
To: 日本Androidの会
もちこさん

今実行してlogcatに表示されたメッセージです。
ちなみにListViewは、IntentをStartするActivityの前に別のActivityで表示しています。
IntentがエラーとなるActivityには、DBのロジックのみ追加しています。

08-31 22:45:57.746: WARN/ActivityManager(74): Activity pause timeout
for HistoryRecord{432847f0 com.blueimpact.golffriend/.GFPlay} GFPLAYは、
IntentをなげるActivity
08-31 22:45:58.746: INFO/WindowManager(74): onOrientationChanged,
rotation changed to 1
08-31 22:46:03.796: DEBUG/NetworkLocationProvider(74):
onCellLocationChanged [19461,100565275]
08-31 22:46:07.242: WARN/ActivityManager(74): Launch timeout has
expired, giving up wake lock!
08-31 22:46:07.766: WARN/ActivityManager(74): Activity idle timeout
for HistoryRecord{43263910 com.blueimpact.golffriend/.clubselect}
clubselectは、投げられるIntent(Activity)

?です。
子のロジックは、今まで全く正常に動作しています。GFPLAYにある全てのIntentで投げるActivityが同様の現象です。

原因解りますでしょうか。
宜しくお願いします。
> > その切り分けができればご提示願います。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Jack

未読、
2010/08/31 10:19:552010/08/31
To: 日本Androidの会
自己レスですが、別途下記のメッセージを見つけました。
注目は下から5行目の
Caused by: java.lang.NullPointerException
です。

なぜこのような現象起きるのでしょうか。ついおとといまで正常に動いていたロジックなのですが。
今回のDB追加とは関係ないような気もします。

この理由ご存じないでしょうか

08-31 23:13:45.046: WARN/ActivityManager(74): Activity idle timeout
for HistoryRecord{43326198 com.blueimpact.golffriend/.condselect} 今回呼び出
そうとしたActivity
08-31 23:13:51.637: DEBUG/AndroidRuntime(12323): Shutting down VM
08-31 23:13:51.637: WARN/dalvikvm(12323): threadid=3: thread exiting
with uncaught exception (group=0x4001da28)
08-31 23:13:51.637: ERROR/AndroidRuntime(12323): Uncaught handler:
thread main exiting due to uncaught exception
08-31 23:13:51.756: ERROR/AndroidRuntime(12323):
java.lang.RuntimeException: Unable to pause activity
{com.blueimpact.golffriend/com.blueimpact.golffriend.GFPlay}:
java.lang.NullPointerException
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:
3059)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:
3016)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:
2999)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.access$2300(ActivityThread.java:116)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1801)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.os.Looper.loop(Looper.java:123)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.main(ActivityThread.java:4203)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
java.lang.reflect.Method.invokeNative(Native Method)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
java.lang.reflect.Method.invoke(Method.java:521)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:791)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
dalvik.system.NativeStart.main(Native Method)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): Caused by:
java.lang.NullPointerException
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
com.blueimpact.golffriend.GFPlay.onPause(GFPlay.java:627)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.Activity.performPause(Activity.java:3578)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.Instrumentation.callActivityOnPause(Instrumentation.java:
1266)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:
3046)
08-31 23:13:51.756: ERROR/AndroidRuntime(12323): ... 12 more
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

kenji tsukamoto

未読、
2010/08/31 11:40:542010/08/31
To: android-g...@googlegroups.com
こんばんは。
feinte_feinteと申します。
 
すでにお分かりになっていることであれば申し訳ありませんが、
Nullアクセスは大抵の場合、
「〇〇で保持しているはずの△△が・・・」
という感じだと思っています。
 
まずは、GFPlayクラスのonPause()で「どの変数がnullになっているか」を確認し、
期待動作としては、その変数に「どこで値が設定されているのか」を
検討されると答えは見えてくるかと思います。
 
 
 
 


 
2010年8月31日23:19 Jack <jzl0...@nifty.com>:
>
> - 引用テキストを表示 -

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


Jack

未読、
2010/09/01 11:12:552010/09/01
To: 日本Androidの会
自己レスですが。

Intentに指定したActivityがStartしていることは、Logcatで解っていましたが、そのすぐ後に
こんなメッセージが出ていました。

Activity pause timeout for HistoryRecord

これをGoogleで調べたところ、StartActivityで呼び出した、Activityが
setContentViewで指定している(R.layout.clublist)のListViewのandroid:id=@+id/
list”の
指定に問題があると色々な方が指摘していました。
(私のアプリもIntentの呼び出しはListViewです)

ただその方の指定は、ListView android:id="@android:id/list" ですが、
AndroidreferenceのListActivityは、ListView android:id="@id/android:list"
となっていました。

まねしてみましたが、両方Exceptionです。??

どなたか同様なエラー心当たりないでしょうか。






On 9月1日, 午前12:40, kenji tsukamoto <tsukaandr...@gmail.com> wrote:
> こんばんは。
> feinte_feinteと申します。
>
> すでにお分かりになっていることであれば申し訳ありませんが、
> Nullアクセスは大抵の場合、
> 「〇〇で保持しているはずの△△が・・・」
> という感じだと思っています。
>
> まずは、GFPlayクラスのonPause()で「どの変数がnullになっているか」を確認し、
> 期待動作としては、その変数に「どこで値が設定されているのか」を
> 検討されると答えは見えてくるかと思います。
>
> 2010年8月31日23:19 Jack <jzl03...@nifty.com>:
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

adachi

未読、
2010/09/01 13:49:112010/09/01
To: 日本Androidの会
こんばんわ

adachiと申します。

feinte_feinteさんも記載されていますが、GFPlayクラスのonPause()が問題だと思います。

ログをよく見ると、

com.blueimpact.golffriend.GFPlay.onPause(GFPlay.java:627)

とありますので、GFPlay.javaの627行目でnull pointer exeptionが発生していると思われます。


「Activity pause timeout for HistoryRecord 」は、Androidのsystem processから呼び
出した、起動元Actiivty (この場合、.GFPlayですかね)のonPause の応答がない場合にでます。
Androidでは、onPauseの一定時間応答がない場合は、system processはひとまずtimeoutとして、処理を続行しますの
で、「Intentに指定したActivityがStart」します。

しかし、起動元のonPauseは、引き続き動作はしており、「Intentに指定したActivityがStart」後にエラーとなるので、このよう
な動作になるのだと思います。

もちこ。

未読、
2010/09/02 12:33:102010/09/02
To: 日本Androidの会
feinte_feinteさん、adachiさんに同意です。

>com.blueimpact.golffriend.GFPlay.onPause(GFPlay.java:627)

が突っかかってしまったから、いつまでたってもListViewが描画できず

>Activity pause timeout for HistoryRecord

なのかなぁと。
onPauseにDBアクセス足したんですかね。
ListViewに表示する項目を取得したりしてますか?

あとは、

>ただその方の指定は、ListView android:id="@android:id/list" ですが、
AndroidreferenceのListActivityは、ListView android:id="@id/android:list"
となっていました。

Viewのidの指定は結構書き方あいまいな部分あったと思いますが、
やってみるんだったら、XMLで定義したViewを呼び出すのよりもコード側で新しく定義して足してみた方が
細かい書き方で悩まなくていいかもしれないです。

Jack

未読、
2010/09/02 21:53:552010/09/02
To: 日本Androidの会
kazuさん、feinte_feinteさん、adachiさん、もちこさん

みなさん、ご助言ありがとうございました。

解決しました。

原因は、皆さんのご指摘通りで、onPuaseの中にあるdb.closeが原因でした。
使用していないdbまでcloseしていたのがひかかったようです。
これをコメントにしたら、正常に動きました。

長い間大変ありがとうございました。
全員に返信
投稿者に返信
転送
新着メール 0 件