[android-group-japan: 4039] [タスクについて教えて下さい。

391 views
Skip to first unread message

cliph

unread,
May 7, 2010, 11:32:47 AM5/7/10
to 日本Androidの会
はじめまして。クリフと申します。

初心者ながら、天気予報ウィジェットを頑張って作っているのですが、
ちょっと行き詰っておりまして、皆様のお力添えを頂ければと思い投稿させて頂きました。

アプリの開発にあたっては、
適切にメモリを解放させる為の配慮が重要だと思いますが、
「タスク」と言うものの概念がいまいち理解できずに悩んでいます。

良くある「タスクキラー」系のアプリは、
能動的に「タスク」をKillすると謳っていますが、
androidにおいてアプリから「タスク」をkillする方法についての記述を見つける事が出来ませんでした。

Activityはfinish()、ServiceはstopSelf()で終了出来て、
processもkillprocess()と言うメソッドでkill出来る様ですよね(まだ、良く理解出来ていませんが。。。)

これらと同じようにタスク(Activityのスタックと理解しています)をKillするメソッドがあるのでしょうか?

それとも、いわゆるタスクキラーは、
プロセスをKillしているのでしょうか?


ウィジェットのユーザーの方にタスクキラーを利用している方が多くいる様で、
ここをしっかり理解していないと皆さんに迷惑をかけてしまうので、
勉強したいと思っています。

なお、私の作っている天気予報ウィジェットは以下のものです。

名前:CliphWeather
http://market.android.com/search?q=pname:net.cliph.android.cliphweather


初歩的な質問で恐縮ですがご教示頂ければ幸いです。

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

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

cliph

unread,
May 8, 2010, 1:11:11 PM5/8/10
to 日本Androidの会
本件自己解決しました。

失礼いたしました。

Shigeo Mutoh

unread,
May 9, 2010, 10:13:06 AM5/9/10
to android-g...@googlegroups.com
武藤です。

えええぇ、すごく興味のわいたお話だったんですけど。
僕はまだもやもやしています。

ちょっと、OS内のプロセスの話と混同されているようにお見受けしましたが、
Activityなどのjavaアプリケーションの生死に関しては、もっと私は知りたいです。
つまるところ、Activity等が死ねる条件とはいったい何だと。

実は自分で作ったActivityではstatic変数にオブジェクトを入れています。
もしそこからActivityインスタンスへつながった場合、死ねなくなるのか?
もしそれでも死ねるのなら、いったいなぜ死ねる? ClassLoaderも一緒に死んだ
って? え、じゃあタスクキラーはいったい何をやっている??
うーむ謎が謎を呼ぶのです。

まだ私もAndroidをはじめたばかりでなぜなぜ坊やです。
AndroidのVMから下回りの実装について、何か読み物はありませんでしょうか?

cliph

unread,
May 22, 2010, 5:30:34 PM5/22/10
to 日本Androidの会
武藤様

返信ありがとうございます。
そして返信気付かずに失礼しました。

> ちょっと、OS内のプロセスの話と混同されているようにお見受けしましたが、
> Activityなどのjavaアプリケーションの生死に関しては、もっと私は知りたいです。
> つまるところ、Activity等が死ねる条件とはいったい何だと。

あ、まさに私そんな状況です。
プロセスを殺せばメモリは解放されると解釈してその様に実装して見ました。
実験的ですが、このやり方でタスクキラーには表示されない様になったので、
まあ良し!としてしまいました^^;

でも、もやもやしているのは武藤様と同じです。
今後はソースコードの読み込みも含めて基礎を勉強しようと思っていますので、
何か情報があれば共有頂けますでしょうか?私もがんばります。

Shigeo Mutoh

unread,
May 23, 2010, 12:30:35 AM5/23/10
to android-g...@googlegroups.com
武藤です。

様付けは慣れていないので、さん付けでよろしくお願いします。
初心者同士がんばりましょう。

その後、自分も相当誤っていたことがだんだん分かってきました。

重大な発見は、DDMSでLogChatを眺めていると、pidという列があることを発見した
ことでした。それはおそらくunixで言うprocess idに違いありません。
#ですよね、違うなら違うって誰か言ってくださいませ。

そしてdalvikvmが、複数存在することを知ったのです。それは僕が思っていた
概念を根本的にひっくり返す事態でした。
そういえば、リッチなことするなあって、誰かが言ってたような。。。

dalvikvmのうちひとつは、自分が開発しているActivityと同じpidなのです。
つまり、Activityを起動すると1個のdalvikvmが起動され、終了時にはもろとも
終了させられる、のだろうと推測しています。

詳しく調べている暇がないのですが、どうやらそういうことらしく、したがって
推測が正しければ、リークに関しては原理的にありえないと言えるのでは
ないでしょうか。

Naohisa

unread,
May 23, 2010, 3:32:10 AM5/23/10
to 日本Androidの会
クリフさん、武藤さん
福岡と申します。

議論の流れをあまり理解しないまま、横から脊髄反射で失礼します。

参考になりそうな議論がひと月ほど前に行われていて、まとめてくださった方のURLを紹介させてください。
「Androidアプリの内部動作に関する情報(1)」 http://togetter.com/li/13467

特に
「Anatomy&Physiology of an Android」 http://bit.ly/6dDKXL
「Dalvik VM Internals」 http://bit.ly/bPqWN
が、(わたしにとっては)大変ありがたい情報でした。

以上です

Shigeo Mutoh

unread,
May 23, 2010, 12:32:06 PM5/23/10
to android-g...@googlegroups.com
 武藤です。

 福岡さん、それは大変興味深いです。

 問題は、わたくし英語はほぼ読めますが、書けない聞けない喋れない。。
#なんで10年も学んだのにこうなのかなぁ。。

 まあなんとなく、分かるのではないか、と期待して見てみます。

 この1ヶ月、本気でAndroidと向き合ってみて、ようやくOSの動きが
見えてきた気がしています。気のせいかも知れませんが。

--
Shigeo Mutoh <xShige...@jp.sony.com>
Reply all
Reply to author
Forward
0 new messages