V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monsoon
V2EX  ›  Android

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

  •  
  •   monsoon · 2015-05-14 23:14:01 +08:00 · 5030 次点击
    这是一个创建于 3241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时基本不写 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个问题的?
    谢谢了。
    不会没人回吧(。-_-。)

    4 条回复    2015-05-15 17:39:36 +08:00
    monsoon
        1
    monsoon  
    OP
       2015-05-14 23:22:18 +08:00
    不会我的问题太复杂了吧Σ(゚ロ゚;),只能靠颜文字来吸引大家了!
    KexyBiscuit
        2
    KexyBiscuit  
       2015-05-14 23:28:17 +08:00 via Android
    ('・ω・')作为一个用户,我表示这种情况下对方是有可能收到两条消息的。
    ('▽'〃)我的想法是客户端向服务器查询发送状况,不过服务器压力就会变大……⊙△⊙有什么更好点思路吗?
    pubby
        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锁,免得耗电)
    allan1st
        4
    allan1st  
       2015-05-15 17:39:36 +08:00
    公司用 IntentService 从来没碰到 Activity 还在前台但 IntentService 被杀的情况。如果你对于重复提交有很高敏感性的话,建议用 SyncAdapter 做同步。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2768 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:01 · PVG 20:01 · LAX 05:01 · JFK 08:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.