作者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