Re: [問題] Widget 的 onUpdate

看板AndroidDev作者 (Mr. Pan)時間12年前 (2013/05/24 12:11), 編輯推噓0(0023)
留言23則, 3人參與, 最新討論串2/4 (看更多)

05/24 09:03,
你的 widget 怎麼更新的 每次都有 bind PendingIntent?
05/24 09:03

05/24 09:04,
不然應該只是沒按到?
05/24 09:04
需要提一些東西用推文不太夠 我的 widget 其實不需要定時更新,所有需要更新都是在按了 button 後才要做的 如: 按了 Btn1 更新 TextA ; 按了 Btn2 更新 ListView 等等 另外忘了說,我設定的 min API Level 是 14 , 網路上有看到說明, 自 Level 14 後,可以只 Update 部分 view ,而確實我在按下 Btn1 的時候純粹只更新 TextA 的 Text (沒重新bind btn1,2 的 PendingIntent) 之後 Btn1 , Btn2 也是還有反應的 還有,我另外有做一個 Activity , 當這個 Activity 按下某按鈕的時候, 會送 Broadcast 給我的 Widget, Widget 收到這個 Broadcast 時會去做 onUpdate 的所有綁定 ( 如 Btn 的 PendingIntent 等等) 問題是在,比如說現在 ListView 有呈現資料,Btn1 , Bnt2 按了也會有反應 之後開了遊戲在玩(像是PAD,神魔之塔... 頗吃效能和資源的遊戲),或者用 Chrome 瀏覽網頁,過了一段時間後,回到桌面發現我的 Widget ListView 上面 的資料不見了(變成空的),這時按 Btn1 , Btn2 都沒反應 這時候我只能打開那個 Activity 點一下那個按鈕, Widget 才會恢復正常 所以我的感覺是 AppWidgetProvider(這個是 Service 吧?),被系統 GC 掉了 現在想了解可能的原因和解決之道,為了避免種情況發生~ 感謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.39.75

05/24 13:43, , 1F
service改用intentservice避免被gc如何?
05/24 13:43, 1F

05/24 13:44, , 2F
不過我不太認為是gc的問題 不過你可以用這招試看看
05/24 13:44, 2F

05/24 13:48, , 3F
等等 你說的是AppWidgetProvider? 這東西哪會被GC? XD
05/24 13:48, 3F

05/24 13:49, , 4F
他也不是Service 它是一個輕量級的BroadcastReceiver
05/24 13:49, 4F

05/24 15:31, , 5F
還是說... 有可能是 Launcher 的問題嗎?
05/24 15:31, 5F

05/24 15:32, , 6F
我有 root 過 + 安裝 AutoKiller Memory Optimizer
05/24 15:32, 6F

05/24 15:32, , 7F
Launcher 本身上面的 widget 有時 widget 確實會沒顯示東西
05/24 15:32, 7F

05/24 15:32, , 8F
我用的 Launcher 是 TSF Shell
05/24 15:32, 8F

05/24 15:53, , 9F
broadcasterreceiver是framework層級的東西 launcher
05/24 15:53, 9F

05/24 15:54, , 10F
是app層級的東西 後者不可能影響到前者的
05/24 15:54, 10F

05/24 15:54, , 11F
你說的autokiller me....啥的我就不知道了
05/24 15:54, 11F

05/24 15:54, , 12F
但是我還是會建議先不要往這方向想
05/24 15:54, 12F

05/24 16:23, , 13F
好的~ 我在試試看到底是怎樣的情況下會讓按鈕失效再來想
05/24 16:23, 13F

05/24 16:23, , 14F
感謝殺手貓大大 XD
05/24 16:23, 14F

05/25 03:41, , 15F
Broadcast Receiver不可能會被GC
05/25 03:41, 15F

05/25 03:42, , 16F
正確來說應該是 用完馬上就GC
05/25 03:42, 16F

05/25 03:42, , 17F
BR是一個很特殊的東西,詳情請trace完整個framework你就明白了
05/25 03:42, 17F

05/25 03:43, , 18F
你的鈕會不作動是因為remoteview是掛在別人家 必須靠適當時間
05/25 03:43, 18F

05/25 03:44, , 19F
把PendingIntent插到AppWidgetManager,
05/25 03:44, 19F

05/25 03:44, , 20F
另外還有一種可能是你PendingIntent帶的flag是否正確
05/25 03:44, 20F

05/25 03:45, , 21F
如果你是PendingIntent.getBroadXXXXX的話,記得要用UPDATE_CUR
05/25 03:45, 21F

05/25 03:46, , 22F
老實說這問題我兩三年前有遇過 後來解了XD 原因如上
05/25 03:46, 22F

05/25 03:47, , 23F
應該是launcher被關掉,導致remoteview 重來 但你沒補新內容
05/25 03:47, 23F
文章代碼(AID): #1HdkXf-a (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1HdkXf-a (AndroidDev)