想请教下关于 Android Service 被杀死(><)之类相关的问题~

2015-05-14 23:14:01 +08:00
 monsoon

平时基本不写 Services,所以对这块完全不了解(・・?
我想用 IntentService 在后台发送 POST 请求给服务器(如果放到 AsyncTask 或者 AsyncTaskLoader 里,用户按 HOME 键,这个请求就会消失,下次再打开应用的时候会再发一次POST请求,这样服务器就有2两条同样的数据)。

所我想请教的问题是:
1、我觉得像 Andorid QQ、微信 之类的程序,如果用户使用了像 绿色守护(我没用过之类的软件,但是我听说可以设置让应用Services不常驻后台) 一样的软件,那么,当用户提交了一个信息内容(POST请求)后,马上后台。

是不是就有可能导致
这个信息提交 -》 服务器成功接收到 -》 服务器还未回复 -》 应用进入后台(HOME) -》 该信息提交的POST请求的Service被绿色守护之类的应用杀死 -》 用户再打开这个应用 -》 这次的提交内容请求丢失(客户端并不会提示是否该信息成功提交),或者是客户端再一次提交——导致该信息提交两次
这样的问题该如何避免、还是说在服务器端对同样的内容进行过滤?

2、在我当前的应用设计上,如果用户提交了一个信息,我会显示一个 ProgressBar,然后通过 IntentService 发送POST请求,当接受到服务器的回复后,隐藏 ProgressBar 让用户一直等待成功或者失败的提示。

考虑的问题:
如果这时候后台这个POST请求服务被杀,那么用户不是永远等不到这个 ProgressBar 消失,提示成功或者失败的提示(当然我也可以给 ProgressBar 设置一个超时的阈值)。
Services 文档里说 *If the service is bound to an activity that has user focus, then it's less likely to be killed*,所以我觉得这个后台被杀还是有可能的,退一步讲,用户在等待的时候后台了,这个 Activiy 失去了用户的焦点(对应上文应用的英文 *that has user focus*),这时候这个POST请求被杀,然后用户再回到原来的应用,上述的这个的问题的就可以呈现了。虽然这个问题可能发生的概率极低。

请问下大家是如何看待这2个问题的?
谢谢了。
不会没人回吧(。-_-。)

5629 次点击
所在节点    Android
4 条回复
monsoon
2015-05-14 23:22:18 +08:00
不会我的问题太复杂了吧Σ(゚ロ゚;),只能靠颜文字来吸引大家了!
KexyBiscuit
2015-05-14 23:28:17 +08:00
('・ω・')作为一个用户,我表示这种情况下对方是有可能收到两条消息的。
('▽'〃)我的想法是客户端向服务器查询发送状况,不过服务器压力就会变大……⊙△⊙有什么更好点思路吗?
pubby
2015-05-14 23:34:29 +08:00
重复递交问题可以用token,每次post之后token失效,并且让服务器告诉你相同的token已经成功post过了。

把service设置startForground可以尽量不被系统杀掉,不过要有一个notification一直显示

可能还要考虑CPU进入睡眠的问题,需要在service中保持CPU唤醒,要不然网络传输啥的都会失去响应(记得在service用完后释放CPU锁,免得耗电)
allan1st
2015-05-15 17:39:36 +08:00
公司用 IntentService 从来没碰到 Activity 还在前台但 IntentService 被杀的情况。如果你对于重复提交有很高敏感性的话,建议用 SyncAdapter 做同步。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX