特定のActivityを終了させる方法

5,280 views
Skip to first unread message

Tamao.N

unread,
Feb 17, 2009, 6:14:47 AM2/17/09
to Android-SDK-Japan
はじめまして、本日新しく入会した西玉夫と申します。
さっそく、質問なのですが、
Androidにおいて、複数のActivityを起動した後で、
最初のActivityだけ残して残りはすべて終了させるようなことが可能でしょうか。

例:
Activity A、B、C、Dと立て続けに起動させ、
DのActivityの処理が終わったら、B、Cも同時に終了させてAに戻る。

・前提
1.B、Cは他人が作成した別の.apkのActivityであり、
 次のActivityを起動したタイミングでfinishメソッドを呼び出すようなことはできない。
2.Dの処理が終了した段階で、FLAG_ACTIVITY_CLEAR_TOPのフラグを持った
 AのActivityを再度立ち上げれば、形の上はAだけ残るようになるが、
 Aで入力していた内容も破棄されてしまうので、できれば避けたい。

何かいい方法があればご教授願います。

Keiji Ariyama

unread,
Feb 17, 2009, 6:31:20 AM2/17/09
to android-...@googlegroups.com
西さん

 はじめまして。有山@大阪です。

> Androidにおいて、複数のActivityを起動した後で、
> 最初のActivityだけ残して残りはすべて終了させるようなことが可能でしょうか。
 確認なんですが、それって、B,Cのアプリケーションは完全に別のapkに独
立していて、その実装は変更できないという前提でしょうか?

 そうなればアプリケーションB,Cのプロセス(と言う概念なんでしょうか?)
そのものをkillすると言う事になると思いますが、果たして出来るんでしょうか。

 やってみた人いますか?
--
Keiji,
ml_an...@c-lis.co.jp

Tamao.N

unread,
Feb 17, 2009, 7:10:19 AM2/17/09
to Android-SDK-Japan
西です。
さっそく返信ありがとうございます。

>  確認なんですが、それって、B,Cのアプリケーションは完全に別のapkに独
> 立していて、その実装は変更できないという前提でしょうか?
その通りです。
立ち上がっているActivity一覧を管理できそうなものを探してみたところ、
LocalActivityManagerが見つかったのですが、
自分で作成する.apk以外には適用できなさそうでした。
何かいい方法があればいいのですが。

Keiji Ariyama

unread,
Feb 18, 2009, 3:22:25 AM2/18/09
to android-...@googlegroups.com
有山@大阪です。

http://developer.android.com/reference/android/os/Process.html#sendSignal(int,%20int)

 これはどうでしょうか。killProcess(int pid)なんてのもありますね。
 問題はどうやって目的のアプリのpidを調べるか。ですが……
--
Keiji,
ml_an...@c-lis.co.jp

gaku

unread,
Feb 18, 2009, 3:37:20 AM2/18/09
to Android-SDK-Japan
gakuです。

何も調べてませんので、いい加減な事を書きますが..
pidは、今回バージョンアップしたSDKで取得できるようになりました(自分のpidだけかも)
killProcessって、必要なpermission周りで苦労しそうですね。
manufest.xmlにpermissionを指定しても、apk転送時に、だめだめ使えないよといわれることが多々あります。


On 2月18日, 午後5:22, Keiji Ariyama <ml_andr...@c-lis.co.jp> wrote:
> 有山@大阪です。
>
> http://developer.android.com/reference/android/os/Process.html#sendSi...)
>
>  これはどうでしょうか。killProcess(int pid)なんてのもありますね。
>  問題はどうやって目的のアプリのpidを調べるか。ですが……
>
> Tamao.N wrote:
> > 西です。
> > さっそく返信ありがとうございます。
>
> >>  確認なんですが、それって、B,Cのアプリケーションは完全に別のapkに独
> >> 立していて、その実装は変更できないという前提でしょうか?
> > その通りです。
> > 立ち上がっているActivity一覧を管理できそうなものを探してみたところ、
> > LocalActivityManagerが見つかったのですが、
> > 自分で作成する.apk以外には適用できなさそうでした。
> > 何かいい方法があればいいのですが。
>
> --
> Keiji,
> ml_andr...@c-lis.co.jp

egg

unread,
Feb 18, 2009, 4:19:08 AM2/18/09
to android-...@googlegroups.com
江川です。
自分のpidは、1.0でも
Process.myPid();
で取れるようです。
他のpidってどうやって取るんでしょうね、少し試してみたものの
動いてるtaskのIDならこんな感じで取れますが
manifest:
<uses-permission android:name="android.permission.GET_TASKS" />

ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfoList = manager.getRunningTasks(99);
pidはどうすれば取れるのかはわかりませんでした。

------------------------------------------
EGAWA Takashi <t.e...@gmail.com>
2009/02/18 17:37 gaku <androi...@gmail.com>:

Tamao.N

unread,
Feb 18, 2009, 5:43:25 AM2/18/09
to Android-SDK-Japan
西です。
返信ありがとうございます。
まずはProcess関連で調べてみたいと思います。

Hideo Kinami

unread,
Feb 18, 2009, 6:43:51 AM2/18/09
to android-...@googlegroups.com
木南です。はじめまして。

ちょっと、最初の質問に戻っても良いでしょうか?

> 例:
> Activity A、B、C、Dと立て続けに起動させ、
> DのActivityの処理が終わったら、B、Cも同時に終了させてAに戻る。

この質問はたまに受けるのですが、これってどのような画面遷移をしたいときに発生するのでしょうか?
携帯のUIはあまり詳しくないので、もし、比較的このような遷移が一般的な例があれば、教えて頂けませんか?
もしかしたら、Android的な解決方法が、別にあるのではないかとかちょっと想像しています。

よろしくお願いいたします。
--
Hideo

2009/02/18 19:43 Tamao.N <24t...@gmail.com>:
>
> 西です。
> 返信ありがとうございます。
> まずはProcess関連で調べてみたいと思います。
> >
>



--
木南 英夫 (http://d.hatena.ne.jp/hkinami/)

Tamao.N

unread,
Feb 18, 2009, 8:48:38 AM2/18/09
to Android-SDK-Japan
西です。
質問に回答いたします。

> > 例:
> > Activity A、B、C、Dと立て続けに起動させ、
> > DのActivityの処理が終わったら、B、Cも同時に終了させてAに戻る。
>
> この質問はたまに受けるのですが、これってどのような画面遷移をしたいときに発生するのでしょうか?
> 携帯のUIはあまり詳しくないので、もし、比較的このような遷移が一般的な例があれば、教えて頂けませんか?
> もしかしたら、Android的な解決方法が、別にあるのではないかとかちょっと想像しています。

例えば、カメラで撮影した写真を写真一覧の中から1つ選び、
その内容を自作のアプリ上に表示したい場合などが考えられるかと思います。
Androidの特徴として、他のアプリ及びそのデータを流用できるという面があり、
ここでは、写真を選択するためにPicturesを利用した例で説明します。
また、ActivityのA~Dを具体的に以下のように定義します。

A:自作アプリ画面
B:Picturesトップ画面
C:Pictures詳細画面
D:自作アプリ画面(データアタッチ用でデータを格納次第、終了しAに戻る)

このように定義した場合、一旦Cまで進んだがBに戻りたい場合が考えられます。
しかし、Dの画面まで進めば、もう写真を選択済みなのでBやCを表示させたくないわけです。
ところが、Dを終了させてもそのままだとBやCは当然、Activityのスタックに残ったままになります。

[API Exp]Makoto Anjo

unread,
Feb 18, 2009, 9:23:38 AM2/18/09
to Android-SDK-Japan
安生です。

apkが異なる状態で特定のアプリケーション(この場合、Activityというよりアプリだと思います)を終了させることが
できるとなると、色々悪さができてしまうのでそうはなっていないはずです。

西さんの挙げた例と最初の質問からすると、DからAのActivityを呼び出した時点で以前の状態(入力途中のものなど)を
復帰させたいということですよね。それなら、AのonPause()で状態を記録し、onResume()で状態を戻すというのが良いです。

Tamao.N

unread,
Feb 18, 2009, 9:50:31 AM2/18/09
to Android-SDK-Japan
西です。

回答ありがとうございました。
セキュリティ上厳しいということなので、やはり入力内容を保持しておくしかなさそうですね。
何か進展があればまた書き込みたいと思います。
他の方々もありがとうございました。
Reply all
Reply to author
Forward
0 new messages