→ asilzheng:你的 widget 怎麼更新的 每次都有 bind PendingIntent? 05/24 09:03
→ asilzheng:不然應該只是沒按到?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
→ Killercat:service改用intentservice避免被gc如何? 05/24 13:43
→ Killercat:不過我不太認為是gc的問題 不過你可以用這招試看看 05/24 13:44
→ Killercat:等等 你說的是AppWidgetProvider? 這東西哪會被GC? XD 05/24 13:48
→ Killercat:他也不是Service 它是一個輕量級的BroadcastReceiver 05/24 13:49
→ darkk6:還是說... 有可能是 Launcher 的問題嗎? 05/24 15:31
→ darkk6:我有 root 過 + 安裝 AutoKiller Memory Optimizer 05/24 15:32
→ darkk6:Launcher 本身上面的 widget 有時 widget 確實會沒顯示東西 05/24 15:32
→ darkk6:我用的 Launcher 是 TSF Shell 05/24 15:32
→ Killercat:broadcasterreceiver是framework層級的東西 launcher 05/24 15:53
→ Killercat:是app層級的東西 後者不可能影響到前者的 05/24 15:54
→ Killercat:你說的autokiller me....啥的我就不知道了 05/24 15:54
→ Killercat:但是我還是會建議先不要往這方向想 05/24 15:54
→ darkk6:好的~ 我在試試看到底是怎樣的情況下會讓按鈕失效再來想 05/24 16:23
→ darkk6:感謝殺手貓大大 XD 05/24 16:23
→ gpc:Broadcast Receiver不可能會被GC 05/25 03:41
→ gpc:正確來說應該是 用完馬上就GC 05/25 03:42
→ gpc:BR是一個很特殊的東西,詳情請trace完整個framework你就明白了 05/25 03:42
→ gpc:你的鈕會不作動是因為remoteview是掛在別人家 必須靠適當時間 05/25 03:43
→ gpc:把PendingIntent插到AppWidgetManager, 05/25 03:44
→ gpc:另外還有一種可能是你PendingIntent帶的flag是否正確 05/25 03:44
→ gpc:如果你是PendingIntent.getBroadXXXXX的話,記得要用UPDATE_CUR 05/25 03:45
→ gpc:老實說這問題我兩三年前有遇過 後來解了XD 原因如上 05/25 03:46
→ gpc:應該是launcher被關掉,導致remoteview 重來 但你沒補新內容 05/25 03:47