lixyz
V2EX  ›  Android

Android 主动清除后台之后, APP 又自启动是怎么实现的呢?

  •  
  •   lixyz · Feb 15, 2023 · 13789 views
    This topic created in 1197 days ago, the information mentioned may be changed or developed.

    下载了 Server 酱的 Android 端 App

    平时是有图标常驻通知栏的

    在多窗口界面清除后台之后,通知栏图标消失

    但随即又会在通知栏出现

    当然我已经设置了 APP 的 自启动 权限

    请问这个功能是如何实现的呢?

    Supplement 1  ·  Feb 17, 2023
    之前没有做过类似的功能,所以完全没有头绪

    根据大家的回复,使用 learningman 的思路搞定了

    因为是自用 APP ,所以在权限方面很方便,最主要是想要接受推送

    我用了一下措施

    1.开启前台服务,降低被系统干死的奉献,这样的缺点是在通知栏一直会有图标显示

    2.在多窗口界面清空之后,在 destory 方法中添加唤醒任务,小米 10 实验成功,经过一天的测试,还可以正常接收推送

    更新一下,万一有遇到同样问题的伙伴,也有个参考
    12 replies    2023-02-16 11:10:14 +08:00
    ziseyinzi
        1
    ziseyinzi  
       Feb 15, 2023
    首先,多任务界面划掉窗口不代表清除了后台
    lixyz
        2
    lixyz  
    OP
       Feb 15, 2023
    @ziseyinzi 其次呢?
    ysc3839
        3
    ysc3839  
       Feb 15, 2023 via Android
    可以看看 Telegram Android 的代码,我只知道也有这样的功能
    Fo3256Go
        4
    Fo3256Go  
       Feb 15, 2023 via Android
    应该是一个消息推送服务吧,
    不管是真的要推送消息,还是虚假地宣称推送消息为了保活。
    只要它这样宣称了,系统就会优先允许它留在后台。
    还有那种在后台播放空白音乐的,都是宣称自己有音乐要播放,其实是为了别的。
    cnuser002
        5
    cnuser002  
       Feb 15, 2023
    按你这描述,可能是做出了守护进程,在主程序挂了之后,守护进程再把它拉起来。相当于没有完全关闭,它就不停复活。你可以试试关闭手机重启,它还会不会自己冒出来。

    安卓应用常驻后台还是很常见的。你划掉可能只是应用的 Activity ,它还有个 Service 在后台运行着。Service 除了没界面,其它的活儿都能继续干的。
    learningman
        6
    learningman  
       Feb 15, 2023   ❤️ 1
    实现方法太多了,试举两例

    首先有通知是 foreground service 的强制要求,保活必须要有个 blocking 的通知挂在前台。应用被清除的时候会调用到 onDestroy 的 lifecycle hook ,可以在这个 hook 中做重新唤醒的操作。
    比如可以用 WorkManager 设置一个 1 秒后启动的单次任务唤醒。
    可以用 Alarm 设置一秒后的唤醒。

    方法太多了,我说的这些是调用正常 API 能实现的,反射搞黑科技的就更多了。
    jeesk
        7
    jeesk  
       Feb 15, 2023
    原生的可以。 国产 ui 你试一试呢? 多进程都会被干
    cheng6563
        8
    cheng6563  
       Feb 15, 2023
    正常 API 一堆
    makelove
        9
    makelove  
       Feb 15, 2023
    @jeesk 过于流氓的也不行吧,反正以前我用 miui 的时候搞不定 PDD
    rojer12
        10
    rojer12  
       Feb 16, 2023
    正常的 api 一堆,同系软件之间的相互唤醒啊,方法太多了
    不是常用软件的建议直接都放 ice box 冻结就好了
    systemcall
        11
    systemcall  
       Feb 16, 2023 via Android
    国产系统很多是有厂家级 api 的,比如微信就在用,不仅不会被轻易杀掉,还可以在应用自己觉得性能不够用的情况下杀掉别的应用
    jiaming1992
        12
    jiaming1992  
       Feb 16, 2023
    既然你已经设置了 app 自启动权限,那它就有概率会被其他保活应用唤醒啊,国产应用集成的乱八七糟第三方 sdk 那些个互拉行为不知道吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3018 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 14:42 · PVG 22:42 · LAX 07:42 · JFK 10:42
    ♥ Do have faith in what you're doing.