平时基本不写 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个问题的?
谢谢了。
不会没人回吧(。-_-。)
1
monsoon OP 不会我的问题太复杂了吧Σ(゚ロ゚;),只能靠颜文字来吸引大家了!
|
2
KexyBiscuit 2015-05-14 23:28:17 +08:00 via Android
('・ω・')作为一个用户,我表示这种情况下对方是有可能收到两条消息的。
('▽'〃)我的想法是客户端向服务器查询发送状况,不过服务器压力就会变大……⊙△⊙有什么更好点思路吗? |
3
pubby 2015-05-14 23:34:29 +08:00 via Android
重复递交问题可以用token,每次post之后token失效,并且让服务器告诉你相同的token已经成功post过了。
把service设置startForground可以尽量不被系统杀掉,不过要有一个notification一直显示 可能还要考虑CPU进入睡眠的问题,需要在service中保持CPU唤醒,要不然网络传输啥的都会失去响应(记得在service用完后释放CPU锁,免得耗电) |
4
allan1st 2015-05-15 17:39:36 +08:00
公司用 IntentService 从来没碰到 Activity 还在前台但 IntentService 被杀的情况。如果你对于重复提交有很高敏感性的话,建议用 SyncAdapter 做同步。
|