ACTION_PICKやACTION_GET_CONTENTで呼び出し元が強制終了

649 views
Skip to first unread message

rinda

unread,
Oct 25, 2012, 5:24:08 AM10/25/12
to android-g...@googlegroups.com
どうもrindaです。

対処方法をご存知の方ご教授お願い致します。
現在ACTION_PICKやACTION_GET_CONTENTでstartActivityForResultを実行して
ギャラリーやエクスプローラー系のアプリを呼び出し
onActivityResultで選択されたデータを取得するアプリを開発しているのですが
たまに呼び出し元のアプリが強制終了、再起動されてしまいデータが取得できないことがあります。
呼び出し先に長く滞在した場合、メモリを使い過ぎた場合などに頻発します。

Activityが強制終了された場合の対応は
onSaveInstanceState、onRestoreInstanceStateでやることのが
Androidアプリ開発者の間で常識かと思うのですが
今回のケースの場合、呼び出し元が終了してしまっているのでデータを保持する場所がなく困っております。

呼び出し元を強制終了されないようにする方法、もしくは終了された場合でもデータを取得する方法を
ご存知の方おられましたら、すみませんがご教授頂けませんでしょうか。

よろしくお願い致します。

Hirokazu Fukami

unread,
Oct 25, 2012, 5:26:10 AM10/25/12
to android-g...@googlegroups.com
こんにちはfkmです。

呼び出し元が落ちる原因はLogcatで確認してみましたか?

2012/10/25 rinda <pirlod...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/G3-n0bfcvaoJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

rinda

unread,
Oct 25, 2012, 5:37:18 AM10/25/12
to android-g...@googlegroups.com
rindaです。はじめまして。

さっそくの御返信ありがとうございます。
ログを貼らせて頂きます。

I/ActivityManager(315): Low Memory: No more background processes.
I/ActivityManager(315): Process jp.xxxx.android.xxxxxx (pid 23267) has died.

jp.xxxx.android.xxxxxxは呼び出し元です。
おそらくメモリが足らなくなって、dieされたんだと思われます。

以上です。


2012年10月25日木曜日 18時26分35秒 UTC+9 fkm:
こんにちはfkmです。

呼び出し元が落ちる原因はLogcatで確認してみましたか?

2012/10/25 rinda <pirlod...@gmail.com>:
> どうもrindaです。
>
> 対処方法をご存知の方ご教授お願い致します。
> 現在ACTION_PICKやACTION_GET_CONTENTでstartActivityForResultを実行して
> ギャラリーやエクスプローラー系のアプリを呼び出し
> onActivityResultで選択されたデータを取得するアプリを開発しているのですが
> たまに呼び出し元のアプリが強制終了、再起動されてしまいデータが取得できないことがあります。
> 呼び出し先に長く滞在した場合、メモリを使い過ぎた場合などに頻発します。
>
> Activityが強制終了された場合の対応は
> onSaveInstanceState、onRestoreInstanceStateでやることのが
> Androidアプリ開発者の間で常識かと思うのですが
> 今回のケースの場合、呼び出し元が終了してしまっているのでデータを保持する場所がなく困っております。
>
> 呼び出し元を強制終了されないようにする方法、もしくは終了された場合でもデータを取得する方法を
> ご存知の方おられましたら、すみませんがご教授頂けませんでしょうか。
>
> よろしくお願い致します。
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/G3-n0bfcvaoJ
> にアクセスしてください。
> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-japan+unsubscribe@googlegroups.com

XBG

unread,
Oct 27, 2012, 9:10:42 PM10/27/12
to android-g...@googlegroups.com
呼び出し元でタスクを多用しているなら減らすべきです。
減らしても解決しない場合は常駐アプリを減らす、端末を交換するくらいしか方法は無いです。

rinda

unread,
Oct 28, 2012, 11:50:38 PM10/28/12
to android-g...@googlegroups.com
どうもrindaです。
アドバイスありがとうございます。

>呼び出し元でタスクを多用しているなら減らすべきです。
アプリAからアプリB(ギャラリーアプリ)を呼び出すだけなので
呼び出し元のタスクはひとつ(アプリA)だけです。
私の認識に間違いがありましたらお手数ですがご教授頂けますでしょうか。

>減らしても解決しない場合は常駐アプリを減らす、端末を交換するくらいしか方法は無いです。
私の端末で動くようにさえできれば良いのなら、この対応を行うのですが
今回のアプリはマーケットに公開して色々な人に使ってもらおうと考えております。
なので、できるだけ端末の状態や環境に関われず正常に動くものをリリースしたいと考えております。
メモリの関係上バックグラウンドプロセスがkillされていくのは
Androidの仕様上仕方の無いことであるというのは認識しております。
しかし、そういう仕様なのであれば呼び出し先で返した結果も
(呼び出し元がkillされた場合でも)
何かしら取得する方法があるのではないかと思い質問させて頂いております。

以上です。

2012年10月28日日曜日 10時10分42秒 UTC+9 XBG:
呼び出し元でタスクを多用しているなら減らすべきです。
減らしても解決しない場合は常駐アプリを減らす、端末を交換するくらいしか方法は無いです。

Hiroshi SAKURAI

unread,
Oct 29, 2012, 3:40:46 AM10/29/12
to android-g...@googlegroups.com
桜井と申します。

> たまに呼び出し元のアプリが強制終了、再起動されてしまいデータが取得できないことがあります。
> 呼び出し先に長く滞在した場合、メモリを使い過ぎた場合などに頻発します。

私が公開しているアプリでもGET_CONTENTを使っているので実験してみましたが、
問題なく動作しているように見えます。(Desire, Android2.2)

1. アプリからGET_CONTENTでギャラリーを開く
2. Process xxx has died.が出るまで負荷をかける
3. ギャラリーに戻り画像を選ぶと、以下のような表示が出て、アプリ(とActivity)が再生成される。
Start proc xxx for activity xxx

Activityは再生成されているので、3.でonActivityResult()が呼ばれたときのActivityのインスタンスは
1.の時点とは異なる物になりますが、onActivityResult()が呼ばれないということは
ありませんでした。

rinda様のところで発生している問題とは、以下のどちらなのでしょうか。
A. onActivityResult()が呼ばれない
B. 1.と3.でActivityのインスタンスが異なると正しく動作しない

--
Hiroshi SAKURAI


2012/10/25 rinda <pirlod...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/G3-n0bfcvaoJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com

Hiroshi SAKURAI

unread,
Oct 31, 2012, 9:59:08 PM10/31/12
to android-g...@googlegroups.com
桜井です。

>> たまに呼び出し元のアプリが強制終了、再起動されてしまいデータが取得できないことがあります。
>> 呼び出し先に長く滞在した場合、メモリを使い過ぎた場合などに頻発します。

時間がたち過ぎた場合に関しては、root activityにandroid:alwaysRetainTaskState="true"
を指定すれば、所望の動作になるかもしれません。

参考
http://stackoverflow.com/questions/7107614/for-how-long-does-android-save-a-killed-activitys-state

--
Hiroshi SAKURAI

2012/10/29 Hiroshi SAKURAI <an.oli...@gmail.com>:

rinda

unread,
Nov 1, 2012, 6:32:25 AM11/1/12
to android-g...@googlegroups.com
rindaです。

いろいろアドバイスありがとうございます。
誠に恐縮ですが、当現象は私の勘違いでした。
呼び出し元が終了された場合でもonActivityResultはちゃんと実行されるようです。
データの取得も問題なくできていました。
なぜかLogが出力されなかったので勘違いをしてしまっていました。失礼しました。

以上、皆さんお時間をとらせて申し訳ございません。


2012年11月1日木曜日 10時59分32秒 UTC+9 an.oli...@gmail.com:
>> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。
>> このグループから退会するには、android-group-japan+unsubscribe@googlegroups.com
Reply all
Reply to author
Forward
0 new messages