多分、恐らく、8割方解決したと思う。
昨日から今日にかけての調査と対応の履歴をメモっときます。
昨夜
・メモリリークと言うキーワードでググりまくる。
・contextを引き回す事でactivity全体の参照が残ってメモリリークの原因となる
 と言う情報を入手。(と言うか、他に情報を見つけられなかった)
・でもこれって、Activityの話であって、appWidgetとは関係ないんじゃない?
 てか、そもそもappWidgetって何なの!?と混乱して思考停止。
今日仕事中
・appWidgetをコントロールするappWidgetProviderはBroadCastReceiverを継承したクラスだと思い出す。
・そして、BroadCastReceiverはonReceiveメソッドを処理し終わると抹殺準備完了なクラスで、
 かつ、長時間(10秒以上と本にあった)の処理をさせるとANR(Android Not Responding)ダイアログが出て、
 強制終了を迫られる。
 →つまり、長時間メモリをリークしてしまう類のクラスじゃない!
・と言う事で、犯人は裏で処理をしているサービスである事が濃厚に。
・ここでふと気付く。
 サービス終了させていないんじゃないかと。。。。
帰宅後
・アストロファイルマネージャをインストールして、プロセスをチェック。
・案の定、Cliphweatherのサービスが居座ってた。しかも10MBも使ってる。。。
・想定された問題点は以下。
 -明示的なサービス停止処理の欠落。
 -サービスをウィジェットと同プロセスで起動している為、プロセスが殺せない?
・これに対し以下の対処を実施。
 -更新処理終了時(もしくは異常終了時)にstopSelf()メソッドにてサービスを停止。
 -サービスを別プロセスで起動。
・これを実施後にアストロでチェックするときれいにサービスが消えてた!^^
これで一応、応急対処は出来たと思うんだけどどうだろう?
問題があればご連絡お願いします。

Tagged with:  

2 Responses to CliphWeatherメモリ問題たぶん解決 ^^

  1. これ欲しい より:

    BUFFALO ノートPC用増設メモリ PC2700 (DDR333) 1GB DN333-A1G/E |

    BUFFALO ノートPC用増設メモリ PC2700 (DDR333) 1GB …

  2. mmasaki より:

    初めまして。Cliph.netさんのHPは大変参考になりました。
    書いてあることは理解できたのですが、下記の部分について、実際コードにどのように反映させたのか、該当部分だけでも良いので、もしお手数でなければ、具体的にご教示頂けませんでしょうか?

    ・これに対し以下の対処を実施。
     -更新処理終了時(もしくは異常終了時)にstopSelf()メソッドにてサービスを停止。
     -サービスを別プロセスで起動。
    ・これを実施後にアストロでチェックするときれいにサービスが消えてた!^^

コメントを残す

メールアドレスが公開されることはありません。