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