V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whereabouts
V2EX  ›  问与答

Android 运行大一点的 App 切换 App 后马上返回原 App 都会导致原 App 重新运行 是什么设计

  •  
  •   whereabouts · 2018-12-04 08:58:21 +08:00 · 2569 次点击
    这是一个创建于 1963 天前的主题,其中的信息可能已经有所发展或是发生改变。
    手机内存有点小只有 3GB,想了解一下原因
    24 条回复    2018-12-04 16:43:36 +08:00
    lhx2008
        1
    lhx2008  
       2018-12-04 09:00:28 +08:00 via Android   ❤️ 3
    原因就是你内存太小了
    honeycomb
        2
    honeycomb  
       2018-12-04 09:01:34 +08:00 via Android
    这年头 6G 内存比较保险
    luojianxhlxt
        3
    luojianxhlxt  
       2018-12-04 09:02:05 +08:00   ❤️ 5
    给你看广告的设计
    justahri
        4
    justahri  
       2018-12-04 09:06:32 +08:00
    当然是让你看广告放松啦
    shenhb
        5
    shenhb  
       2018-12-04 09:06:41 +08:00
    因为 android 设计就是这样,后台的进程在内存不足的时候会被杀掉,回收内存
    ruimz
        6
    ruimz  
       2018-12-04 09:12:12 +08:00 via Android
    让你看广告啦
    比如我王者荣耀切到后台聊句微信再回来都不掉线,从 tb 切出去再回来就得看广告了
    我看 tb 的时候锁屏再打开,都会出广告。
    而且每次 tb (非启动)出广告的时候内存用了一半都没有呢
    icop
        7
    icop  
       2018-12-04 09:21:14 +08:00
    我也遇到了。并且从任务管理器切回去就不会重启,如果从桌面点进去就会重启。
    我是这么处理的。
    在你的基类 Activity 里面的 onCreate()方法中,加入如下代码:
    if (!isTaskRoot()) {
    Intent mainIntent = getIntent();
    String action = mainIntent.getAction();
    if (mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
    finish();
    return;
    }
    }
    并且重新实现基类 Activity 的

    @Override
    public boolean moveTaskToBack(boolean nonRoot) {
    return super.moveTaskToBack(true);
    }

    应该就能解决问题了。
    还有你的启动模式 不能用 singeInstance。
    anan1231230
        8
    anan1231230  
       2018-12-04 09:21:46 +08:00
    界面被回收了,想办法把进程锁住吧,不回收就没问题了
    greenskinmonster
        9
    greenskinmonster  
       2018-12-04 09:23:48 +08:00
    楼上一堆瞎扯的,resume 时显示 splash screen,跟 app 被系统回收,重新运行完全两码事。
    系统回收策略,每个厂商都会自己定制,并不是跟 AOSP 完全一致。
    maxxxxx
        10
    maxxxxx  
       2018-12-04 09:27:03 +08:00
    @greenskinmonster 说楼上瞎扯,你也没扯出什么干货啊。
    greenskinmonster
        11
    greenskinmonster  
       2018-12-04 09:30:57 +08:00   ❤️ 2
    @maxxxxx #10 resume,系统回收,点到了还不明白的话,给你干货你咽得下吗?
    jdgui
        12
    jdgui  
       2018-12-04 09:39:38 +08:00
    @greenskinmonster 楼主是 3g 内存,而且是运行大 app 才会出现。所以基本上可以排除厂商在 resume 的时候展示的。
    mike77546
        13
    mike77546  
       2018-12-04 10:03:02 +08:00
    你的手机内存太小
    wohenyingyu03
        14
    wohenyingyu03  
       2018-12-04 10:11:07 +08:00
    @jdgui 人家回的是楼上瞎扯的,不是回楼主。
    fan123199
        15
    fan123199  
       2018-12-04 10:14:56 +08:00
    没错,是 app 设计太烂。好的 app 可以做到不重启。除非你手动退出。
    maxxxxx
        16
    maxxxxx  
       2018-12-04 10:31:08 +08:00
    @greenskinmonster 干货没看到,看到了你的傲慢。哪里来的优越感?
    Raisu
        17
    Raisu  
       2018-12-04 10:33:50 +08:00
    产品需求就是这样吧
    icop
        18
    icop  
       2018-12-04 10:36:37 +08:00   ❤️ 1
    我说的是,如果从桌面点击进去会重启 APP,从最近任务点击进去不会重启 APP。

    具体原因看下面的地址:
    https://issuetracker.google.com/issues/36941942
    maxxxxx
        19
    maxxxxx  
       2018-12-04 10:38:49 +08:00
    @greenskinmonster resume 说白了就是前后台切换?从楼主的描述上明显就是杀了进程,我看了下楼上说目的让你看广告的明显是在开玩笑而已,不知道你说楼上瞎扯的意义。
    jdgui
        20
    jdgui  
       2018-12-04 10:43:57 +08:00
    @wohenyingyu03 好像是,我理解偏了。
    greenskinmonster
        21
    greenskinmonster  
       2018-12-04 10:44:37 +08:00   ❤️ 1
    @wohenyingyu03 #14 @jdgui #12
    抱歉,打击面过广,确实不是说楼主。
    系统内存太少是一个解释。
    我更倾向于系统回收策略有点问题,如果这个 app 刚刚还使用过,系统还是应该先回收使用时间更早的应用。
    yogogo
        22
    yogogo  
       2018-12-04 13:21:07 +08:00
    假装重新启动页,其实是要让你看启动页的广告
    xzk715
        23
    xzk715  
       2018-12-04 14:03:02 +08:00
    @icop 你的回答是正解 其他的都在扯淡 我们开发也遇到这个问题 确实是 Android 的原因 跟各厂商没关系
    iacyl
        24
    iacyl  
       2018-12-04 16:43:36 +08:00 via Android
    内存太小,还有可能系统为了内存杀 app。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2829 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:13 · PVG 21:13 · LAX 06:13 · JFK 09:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.