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

强装微笑,问 Android 大佬一个很神奇的问题

  •  
  •   pcatzj · 2017-06-27 10:30:15 +08:00 · 10071 次点击
    这是一个创建于 2741 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的,在某个地方,有这样一个 app,他长得很胖,也很邋遢,但是庆幸的是,他活得还算好,暂无性命之忧。直到有一天,他身患顽疾:按 home 键回到桌面,然后再次点击桌面图标回到 app 时,app 就重新启动了(一般都是立马点击,所以应该不存在后台回收的问题)。但是只要睡一觉(杀进程,重启 app ),这个顽疾就立马暂时好了。虽然这个病并不是经常出现,但是他还是很难过,他感觉自己不是一个正常的 app,他找过医生,医生也没发现什么问题(在 onResume()和 onStop()里也没有特别的处理)。他得了这个病已经很久了,虽然不是很影响自己的生活,但是最近有一个人开始就这个病嘲笑他,他又陷入了忧伤,于是他现在来到了 v2,想得到帮助!

    第 1 条附言  ·  2017-07-04 16:21:26 +08:00
    这两天一直被这个问题困扰,还好最近取得了一个进展,我能把这个问题必现了。

    问题的原因也找到了,就是在我每次按 home 键回到桌面,当我再次唤醒 app 的时候,activity 通过 android.intent.action.MAIN 这个 intent 重新加载了我的 MainActivity,这跟期望的逻辑不太一样。

    请问这是为什么,基本排除内存不足的问题。而且我杀进程重启和按返回键退出 app 都可以解决这个问题,请问这种神奇的现象是怎么造成的?为什么系统会重新发 android.intent.action.MAIN 这个 intent 呢?
    第 2 条附言  ·  2017-07-04 17:14:32 +08:00
    已经找到问题了,
    解决方法: http://blog.csdn.net/zhangcanyan/article/details/52777265
    http://blog.csdn.net/ethanco/article/details/50128689

    但是第二个链接指向的博客里说的在我这里好像行不通,我的启动 activity 本来就是 singleTop 的,我把 launchMode 删除(即改为默认的 standard 模式)也还是不行。最终通过第一篇博客里的判断 isTaskRoot 方法来解决了问题。

    本来以为自己基本知道了各个启动模式的用法,但是和 launch intent 结合使用的问题还是第一次遇到,学海无涯,抓紧时间把这个问题搞懂,在此先把解决方案记录一下。还是谢谢各位大佬的宝贵回复,谢谢!
    11 条回复    2017-07-04 16:22:50 +08:00
    whileFalse
        1
    whileFalse  
       2017-06-27 10:58:14 +08:00
    跟手机有关系吗。
    搞个国外版的手机试试看。
    以及楼主的排版不太好。
    pcatzj
        2
    pcatzj  
    OP
       2017-06-27 11:00:43 +08:00
    @whileFalse #1 跟手机不知道有没有关系,但是在很多手机上都复现过
    没有国外版手机,另外,其他 app 也没见过这个问题呀,就算是这个问题,但是问题还是得解决啊,客户好像基本没有外国手机
    v2 不太会排版,意见听取,日后改正!谢谢!
    exc
        3
    exc  
       2017-06-27 16:48:05 +08:00
    淘宝、京东 等 app 在内存极少的情况下,只要回到 home 或锁屏来电,就会重新启动, 如果强制杀死再打开,会走恢复流程(我是在 618 切换 app 比价时遇到的,每次都重启,恶心的我想砸手机),我猜想,跟国产 rom 有关。

    强制杀死走的是 android 标准生命周期,可以做状态恢复,而被 rom 杀死,可能走的就是重新启动,app 无法恢复。

    如果推测合理,你这个 app 就是占用内存太多,又不是白名单,国产 rom 就杀了。
    pcatzj
        4
    pcatzj  
    OP
       2017-06-27 17:07:58 +08:00
    @exc #3 没有吧,内存占用肯定比不上淘宝啥乱七八糟的
    Jasmine2016
        5
    Jasmine2016  
       2017-06-27 17:11:37 +08:00
    淘宝最近又换了新的流氓方式:从别的地方切换回淘宝后,它并不是重新启动(还算良心吧?),而是先插 5 秒广告再回到原先的界面。。。
    exc
        6
    exc  
       2017-06-27 18:10:07 +08:00
    @Jasmine2016 重新启动是淘宝主动执行的吗,以前猜过,觉得这样好白痴,明明做了状态恢复,插 5 秒广告是应用还存活时的操作吧。
    @pcatzj 占用可能超过了剩余
    pcatzj
        7
    pcatzj  
    OP
       2017-06-27 18:16:32 +08:00
    @exc #6 一般单独应用有最大内存限制吗,如果有的话,是多少
    Jasmine2016
        8
    Jasmine2016  
       2017-06-28 08:29:51 +08:00
    @exc 嗯,就是说从任意位置(从桌面点开 or 从后来切换过来)启动都插广告,哈哈
    exc
        9
    exc  
       2017-06-28 19:13:39 +08:00
    @Jasmine2016 无言以对
    @pcatzj 以前有而且很少,现在已经很大了,几百兆是没问题的,并且不同 rom 对这方面的执行策略也不一样,看情况。 我的意思是占用的内存比较大(没有超过限制),这时候退到后台,系统内存极少的情况下,会优先回收那些内存大的 app。
    kmahyyg
        10
    kmahyyg  
       2017-06-29 09:11:36 +08:00 via Android
    看了楼上的回复,还是建议楼主至少刷个 LineageOS 试试,估计是 lmk 相关的问题。如果 LineageOS 也这样,楼主就可以去优化 ram 了
    pcatzj
        11
    pcatzj  
    OP
       2017-07-04 16:22:50 +08:00
    不好意思我又重新打开了这个帖子,但是还是同一个问题,感觉没必要新开帖子,希望大佬们能不厌其烦,继续帮忙解惑,先谢谢各位了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   944 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.