Re: [android-group-japan: 21203] Nexus7のアプリ終了で困っています

1,142 views
Skip to first unread message

Hirokazu Fukami

unread,
Dec 10, 2012, 8:09:45 AM12/10/12
to android-g...@googlegroups.com
こんばんはfkmです。

まず
> Nexus7にて画面右下のメニューからフリックでアプリケーションを終了可能になったようです。
ですが、Nexus7に限らず、Galaxy Nexusや手元にあるHTC Jでも同様の操作はできます。

プロセスが外部から強制終了させられそうな時に処理をいれるのは、
セキュリティの面から見ても不可能だと思います
(ずーーっと、裏でこっそり動きつつ監視するアプリが作れちゃいますよね)

2012/12/10 小川達也 <jmas.tats...@gmail.com>:
> はじめまして。
> こんにちは。
>
> 表題の件につきまして、アプリケーションの終了処理について、お知恵を頂きたいです。
>
> Nexus7にて画面右下のメニューからフリックでアプリケーションを終了可能になったようです。
> そのメニューから終了させられるとアプリケーションのライフサイクルを無視してプロセスが殺されてしまっているようです。
> 自作のアプリにリソースを回収する処理を入れたいのですが、Nexus7の場合の良い回収方法をご存知の方はいらっしゃいますか。
>
> 私の方で試してみた事は、
> ①onDestroyで回収 =>onDestroyが呼ばれないのでNG
> ②サービスで監視して回収 =>サービスも一緒に殺されてしまうのでNG
>
> ※START_STRICKYを設定していても起動してくれない時があるようです。
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/zweRWSYqqKQJ
> にアクセスしてください。
> このグループに投稿するには、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

Hiroaki GOTO as GORRY

unread,
Dec 10, 2012, 12:00:58 PM12/10/12
to android-g...@googlegroups.com

後藤 浩昭(GORRY)です。

> Nexus7にて画面右下のメニューからフリックでアプリケーションを終了可能になったようです。
> そのメニューから終了させられるとアプリケーションのライフサイクルを無視してプロセスが殺されてしまっているようです。
> 自作のアプリにリソースを回収する処理を入れたいのですが、Nexus7の場合の良い回収方法をご存知の方はいらっしゃいますか。

Nexus7でなくても、さらにいえばAndroidのずっと昔のバージョンから、
以下のときには、ライフサイクルが無視されます。

・タスクマネージャなどからアプリが強制終了させられるとき
・バックグラウンドに回ったアプリがメモリ不足などで終了させられるとき


終了時にリソース回収が保証できないのであれば、次回起動時にリソース回収が
保証されるようにすればよいかと思います。
SharedPreferenceなどで「起動中フラグ」を用意し、以下のように制御します。

・onCreate()の最初で、まず「起動中フラグ」を確認する。
「起動中フラグ」が立ったままなら、前回終了時にリソース回収が
行われなかったものとして、リソース回収処理をする。
・「起動中フラグ」を立て、アプリ本来の実行作業に入る。
・onDestroy()の最後で、リソース回収処理後に「起動中フラグ」を下ろす。


--
Hiroaki GOTO as "GORRY" : 後藤 浩昭
EMAIL: gorr...@gmail.com

小川達也

unread,
Dec 10, 2012, 7:55:51 PM12/10/12
to android-g...@googlegroups.com
返信有難う御座います。

>>・タスクマネージャなどからアプリが強制終了させられるとき 
>>・バックグラウンドに回ったアプリがメモリ不足などで終了させられるとき 
GORRYさんのおっしゃっている通り、ライフサイクルを無視してアプリが終了してしまう場合については、
起動時リソース回収で対応する処理を入れていました。

ただ、タスクマネージャ終了やメモリ不足終了と異なり、
NexusやNexus7のメニューから終了する操作については、ユーザが簡単操作でプロセスを殺せるようになってしまった印象がありましたので、
皆様がどう対応されているのかご意見を伺いたかった次第です。

個人的には、右下メニューでアプリケーションを終了させる処理を良く使っているので、
Android 4.xからはonDestroyが呼ばれなくても大丈夫な実装をしないといけないかと思っています。

Makoto Yamazaki

unread,
Dec 10, 2012, 8:42:10 PM12/10/12
to android-g...@googlegroups.com
zaki です。

Activity のライフサイクルについては
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
に詳細な記述がありますが、少し下の方にある In general the movement through an activity's
lifecycle looks like this:
の表にの Killable? 列に、各ライフサイクルメソッドがreturn した後でシステムが以降のライフサイクルメソッドを
無視してアプリプロセスを殺す可能性があるかどうかが書かれています。

この表を見ればわかるように、呼びだしが行われないと困るような処理は(ゲームアプリで現状の状態を
永続化するとか)は、2系までonPause() で、3系以降は onStop() までには呼ぶようにしないといけないと
いうのは以前からかわっていません。
なので
「Android 4.xからはonDestroyが呼ばれなくても大丈夫な実装をしないといけないかと思っています。」
というのは別に 4.x にかぎらず昔からそのように実装しなければいけないお約束です。



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



--
YAMAZAKI Makoto

小川達也

unread,
Dec 11, 2012, 8:43:21 PM12/11/12
to android-g...@googlegroups.com
ご返信有難う御座います。

>Killable? 列に、各ライフサイクルメソッドがreturn した後でシステムが以降のライフサイクルメソッドを 
>無視してアプリプロセスを殺す可能性があるかどうかが書かれています。 
勉強になりました。
onPause、onStopで対応できるようにアプリケーションの作りを工夫してみます。
Reply all
Reply to author
Forward
0 new messages