KWGT で作ったウィジェットが意図したタイミングで更新されないときの解決
どこを調べても解決しなかったのでメモを残しておきます。
「KWGT 更新されない」などのキーワードで調べると出てくる解決はだいたい以下の通り。
KWGT の設定「高度なオプション - 更新方法」の見直し
タスクキラーアプリの無効化
Android の省電力設定の見直し
これらでは解決しませんでした。試行錯誤した結果、更新されないのは「KWGT の変数評価のタイミング」に依存する問題だとわかりました。
解決方法
更新されない文字列、オブジェクトの各設定値が「高頻度で評価される変数」に依存するようにします。具体的には秒単位で評価される変数(例えば時計の秒 df(s))を該当の更新したい値に登場させます。
XXX + fd(s)*0
ここで XXX は任意の値で、この値を利用するオブジェクトは思い通りに更新されないものとします。それに df(s)*0 (常にゼロ)を加算することで XXX + df(s)*0 は秒単位で評価されます。結果、この値を利用するオブジェクトは秒単位で更新されるようになります。
df(s)*0 をグローバル変数 dummy として登録しておいてそれを利用する形にすると後で意図を思い出せていいかもしれません。
XXX + gv(dummy)
ただし、他のグローバル変数の定義の中で gv(dummy) を使うと該当グローバル変数は意図したとおりに更新されません。オブジェクトの設定値に直接 gv(dummy) が登場するようにしましょう。