V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
monsoon
V2EX  ›  Android

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

  •  
  •   monsoon · May 14, 2015 · 13876 views
    This topic created in 4004 days ago, the information mentioned may be changed or developed.

    平时基本不写 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 replies    2015-05-15 17:39:36 +08:00
    monsoon
        1
    monsoon  
    OP
       May 14, 2015
    不会我的问题太复杂了吧Σ(゚ロ゚;),只能靠颜文字来吸引大家了!
    KexyBiscuit
        2
    KexyBiscuit  
       May 14, 2015 via Android
    ('・ω・')作为一个用户,我表示这种情况下对方是有可能收到两条消息的。
    ('▽'〃)我的想法是客户端向服务器查询发送状况,不过服务器压力就会变大……⊙△⊙有什么更好点思路吗?
    pubby
        3
    pubby  
       May 14, 2015 via Android
    重复递交问题可以用token,每次post之后token失效,并且让服务器告诉你相同的token已经成功post过了。

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

    可能还要考虑CPU进入睡眠的问题,需要在service中保持CPU唤醒,要不然网络传输啥的都会失去响应(记得在service用完后释放CPU锁,免得耗电)
    allan1st
        4
    allan1st  
       May 15, 2015
    公司用 IntentService 从来没碰到 Activity 还在前台但 IntentService 被杀的情况。如果你对于重复提交有很高敏感性的话,建议用 SyncAdapter 做同步。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2637 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:15 · PVG 11:15 · LAX 20:15 · JFK 23:15
    ♥ Do have faith in what you're doing.