看板 AndroidDev 關於我們 聯絡資訊
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