2015年3月23日月曜日

うまくゆかないちょっと気になることをメモ書き

アプリを作って使っていて気になって原因はわからないものの解消できたものと、原因が不明なものとが2つあるのでメモ書き。


古い順から書くと、一つはServiceの動作に関して。
前提条件がどこからおかしいのかもわからず、そもそもAndroidのVMって多重起動してるんじゃないのかな?って思っている部分とかもあります。そもそもActivityのインスタンスが複数出来上がってしまうというのは最初から色々と混乱した部分です。

戯言はおいておいて、単純にActivityにServiceの開始、終了ボタンを設けて、サービスの開始と終了を行っているのですが、サービスの終了が上手くいかないときがあるというのが一つ目の原因不明の挙動です。

開始する時のintentのcontextもgetApplicationで単一のはずなので、ってこの単一と考えてるのがそもそもの間違えなのかな?っていうのもあります。


もう一つは、Widgetの話になります。
Androidが動作中は問題ないのですが、ランチャーに貼り付けた後にシステムを再起動するときに表示されるまでの時間がかかってしまうという。というものです。

システム側で「ウィジェットは初期化中」とか準備中とかっていう表示がされている感じですが、ものによってはそんなものは表示されないで、それなりの表示が行われているものもあります。

最初は単純に表示するまでに余計なことをしているのか、必要な処理がおこなわれていないかと思っていたのですが、SDKのサンプルをコンパイル実行しても同様の表示が行われたのでとても不可思議な状況に。

また初期表示がそれなりに行われるものの一つに時計ウィジェットなどは変な表示は一切無く表示されます。

一つはウィジェットでバックグラウンド処理のためにServiceを利用しているのですが、初期化処理に時間がかかってしまうのではないかと考え、Serviceの起動部分を力技ですが別スレッドで起動するようにしてみましたが、変化せず。
一つのウィジェットはブロードキャストレシーバーがマニュフェスト記述だけで受信可能だったので、Serviceクラスを破棄し、単独のブロードキャストレシーバークラスにして実装したところ、表示がそれなりに行われるようになりました。(状況が変化してもウィジェットの画面更新はシステムが完全に起動し終わるまで行われませんが)
違いといえばServiceクラスを廃止した程度なのですが、インポートライブラリの初期化プロセスのどこかがボトルネックとなっているのかもしれません。
まだ原因がはっきりとつかめていないのでこれもなんとも歯がゆい問題です。

と悩みだけの話でした(笑)

0 件のコメント:

コメントを投稿