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