首页 > 其他分享 >Android应用保活攻略

Android应用保活攻略

时间:2024-06-05 17:03:16浏览次数:22  
标签:攻略 系统 保活 应用 使用 进程 Android

前言

Android应用保活是一个老生常谈的话题,本文尽可能收集市面上的保活手段,希望能对你有所帮助。

在Android系统中,保活(保持应用进程一直存活)就是为了让应用在后台持续运行,来实现某些特定的功能,如实时消息推送、定位服务等。然而,由于Android系统为了节省资源和保护用户隐私,通常会限制后台应用的运行。因此,我们需要采取一些策略来实现保活。以下是30个常见的Android保活手段,帮助你突破后台限制。

1. 前台服务(Foreground Service)

将应用的Service设置为前台服务,这样系统会认为这个服务是用户关心的,不容易被杀死。前台服务需要显示一个通知,告知用户当前服务正在运行。通过调用 startForeground(int id, Notification notification) 方法将服务设置为前台服务。

Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。Android将进程分为6个等级,它们按优先级顺序由高到低依次是:

  1. 前台进程( FOREGROUND_APP)
  2. 可视进程(VISIBLE_APP )
  3. 次要服务进程(SECONDARY_SERVER )
  4. 后台进程 (HIDDEN_APP)
  5. 内容供应节点(CONTENT_PROVIDER)
  6. 空进程(EMPTY_APP)

2. 双进程守护

创建两个Service,分别运行在不同的进程中。当一个进程被杀死时,另一个进程可以通过监听 onServiceDisconnected(ComponentName name) 方法来感知,并重新启动被杀死的进程。这样可以相互守护,提高应用的存活率。

3. 使用系统广播拉活

使用系统广播拉活。监听系统广播,如开机广播、网络变化广播、应用安装卸载广播等。当收到广播时,检查应用进程是否存活,如果已经被杀死,则重新启动应用。

4. JobScheduler

使用JobScheduler定时启动应用。JobScheduler是Android 5.0引入的一种任务调度机制,可以在满足特定条件下执行任务。通过创建一个Job,设置触发条件,然后将Job提交给JobScheduler。当触发条件满足时,JobScheduler会启动应用。

5. 白名单

引导用户将应用加入系统的白名单,如省电白名单、自启动白名单等。加入白名单的应用不会受到系统的限制,可以在后台持续运行。

6. 第三方推送服务

使用第三方推送服务,如极光推送、小米推送等。这些推送服务通常使用保活技巧,可以保证消息的实时推送。

7. 静态广播监听

在AndroidManifest.xml中注册静态广播,监听系统广播,如电池状态改变、屏幕解锁等。当收到广播时,检查应用进程是否存活,如果已经被杀死,则重新启动应用。需要注意的是,从Android 8.0开始,静态广播的使用受到了限制,部分隐式广播无法通过静态注册来接收。

8. 合理利用Activity

在必要时,将应用的Activity设置为singleTask或singleInstance模式,确保应用在后台时只有一个实例。这可以减少系统对应用的限制,提高应用在后台的存活率。

9. 使用AlarmManager定时唤醒

使用AlarmManager定时唤醒应用。通过设置一个定时任务,当到达指定时间时,使用PendingIntent启动应用。需要注意的是,从Android 6.0开始,AlarmManager的行为受到了限制,当设备处于低电量模式时,定时任务可能会被延迟。

10. 合理设置进程优先级

Android系统会根据进程的优先级来决定是否回收进程。通过合理设置进程优先级,可以降低系统回收进程的概率。例如,可以将Service设置为前台服务,或者将进程与用户正在交互的Activity绑定。

11. 使用sticky广播

使用sticky广播在一定程度上可以提高广播接收器的优先级。当发送一个sticky广播时,系统会将该广播存储在内存中,这样即使应用被杀死,也可以在重新启动时收到广播。但需要注意的是,从Android 5.0开始,sticky广播的使用受到了限制,部分广播无法使用sticky模式发送。

12. 使用WorkManager

WorkManager是Android Architecture Components的一部分,它为后台任务提供了一种统一的解决方案。WorkManager可以自动选择最佳的执行方式,即使应用退出或设备重启,它仍然可以确保任务完成。WorkManager在保活方面的效果可能不如其他方法,但它是一种更符合Android系统规范的解决方案,可以避免系统限制和用户体验问题。

13. 合理使用WakeLock

在某些特定场景下,可以使用WakeLock(电源锁)来防止CPU进入休眠状态,从而确保应用能够在后台持续运行。但请注意,WakeLock可能会导致设备电量消耗增加,因此应谨慎使用,并在不需要时尽快释放锁。

14. 合理使用SyncAdapter

SyncAdapter是Android提供的一种同步框架,用于处理数据同步操作。SyncAdapter可以根据设备的网络状态、电池状态等条件来自动调度同步任务。虽然SyncAdapter并非专门用于保活,但它可以在一定程度上提高应用在后台的存活率。

15. 使用AccountManager

通过在应用中添加一个账户,并将其与SyncAdapter关联,可以在一定程度上提高应用的存活率。当系统触发同步操作时,会启动与账户关联的应用进程。但请注意,这种方法可能会对用户造成困扰,因此应谨慎使用。

16. 适配Doze模式和App Standby

从Android 6.0(API级别23)开始,系统引入了Doze模式和App Standby,以优化设备的电池使用。在这些模式下,系统会限制后台应用的网络访问和CPU使用。为了保证应用在这些模式下正常运行,您需要适配这些特性,如使用高优先级的Firebase Cloud Messaging(FCM)消息来唤醒应用。

17. 使用Firebase Cloud Messaging(FCM)

对于需要实时消息推送的应用,可以使用Firebase Cloud Messaging(FCM)服务。FCM是一种跨平台的消息推送服务,可以实现高效且可靠的消息传递。通过使用FCM,您可以确保应用在后台时接收到实时消息,而无需采取过多的保活手段。

18. 遵循Android系统的最佳实践

在开发过程中,遵循Android系统的最佳实践和推荐方案,可以提高应用的兼容性和稳定性。例如,合理使用后台任务、避免长时间运行的服务、优化内存使用等。这样可以降低系统对应用的限制,从而提高应用在后台的存活率。

19. 及时适配新系统版本

随着Android系统版本的更新,系统对后台应用的限制可能会发生变化。为了确保应用在新系统版本上能够正常运行,您需要及时适配新系统版本,并根据需要调整保活策略。

20. 与用户建立信任

在实际开发中,应尽量遵循系统的规范和限制,避免过度使用保活手段。与用户建立信任,告知用户应用在后台运行的原因和目的。在用户授权的情况下,采取适当的保活策略,以实现所需功能。

21. 使用Binder机制

Binder是Android中的一种跨进程通信(IPC)机制。通过在Service中创建一个Binder对象,并在其他进程中获取这个Binder对象,可以使得两个进程建立连接,从而提高Service的存活率。

22. 使用native进程

通过JNI技术,创建一个native进程来守护应用进程。当应用进程被杀死时,native进程可以感知到这个事件,并重新启动应用进程。这种方法需要C/C++知识,并且可能会增加应用的复杂性和维护成本。

23. 使用反射调用隐藏API

Android系统中有一些隐藏的API和系统服务,可以用于提高应用的存活率。例如,通过反射调用ActivityManager的addPersistentProcess方法,可以将应用设置为系统进程,从而提高应用的优先级。然而,这种方法存在很大的风险,可能会导致应用在某些设备或系统版本上无法正常运行。

24 监听系统UI

监听系统UI的变化,如状态栏、导航栏等。当系统UI变化时,检查应用进程是否存活,如果已经被杀死,则重新启动应用。

25. 使用多进程

在AndroidManifest.xml中为Service或Activity设置android:process属性,使其运行在单独的进程中。这样,即使主进程被杀死,其他进程仍然可以存活。

26. 使用Provider

在AndroidManifest.xml中注册一个Provider,并在其他应用中通过ContentResolver访问这个Provider。这样,即使应用在后台,只要有其他应用访问Provider,应用就可以保持存活。

27. 关注Android开发者文档和官方博客

Android开发者文档和官方博客是获取保活策略和系统更新信息的重要途径。关注这些资源,以便了解最新的系统特性、开发者指南和最佳实践。

28. 性能优化

优化应用的性能,降低内存、CPU和电池的消耗。这样,系统在资源紧张时可能会优先回收其他消耗较高的应用,从而提高您的应用在后台的存活率。

29. 用户反馈

关注用户的反馈,了解他们在使用应用过程中遇到的问题。根据用户的反馈,调整保活策略,以实现最佳的用户体验。

30. 使用NotificationListenerService

通过实现一个NotificationListenerService并在AndroidManifest.xml中注册,可以监听系统通知栏的变化。当收到新的通知时,检查应用进程是否存活,如果已经被杀死,则重新启动应用。这种方法可以利用系统通知的变化来触发应用的启动,从而提高应用在后台的存活率。需要注意的是,为了使用NotificationListenerService,用户需要在设置中授权应用访问通知权限。

最后,你真的需要保活吗?

保活策略可能会导致系统资源消耗增加、用户体验下降,甚至引发系统限制或用户卸载应用。因此,在实际开发中,应根据功能需求和用户体验来权衡保活策略,尽量遵循系统的规范和限制。在可能的情况下,优先考虑使用系统推荐的解决方案,如前台服务、JobScheduler等。

标签:攻略,系统,保活,应用,使用,进程,Android
From: https://blog.csdn.net/u010345983/article/details/137517851

相关文章

  • 关于Android的学习心得
    一、AS中的主要组件1、Activity组件[1]-Activity的基本使用1.Activity是什么Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个Activity。2.Activity中的onCreate()方法onCreate()方法:用于在活动(Activity)的生命周期中进行......
  • android12 Settings 添加导航栏和状态栏开关
    平台RK3568,android12添加导航栏和状态栏的开关。 通过设置系统属性来默认系统关闭导航栏和状态栏。Index:device/rockchip/rk356x/device.mk===================================================================---device/rockchip/rk356x/device.mk(revision2442......
  • 基于Android的校园自由贸易系统设计与实现
    临近毕业,许多毕业生都要在离校之前清理自己的物品。以前大多数学生会选择丢弃,造成了资源的大量浪费。而近几年,二手交易市场在校园中如雨后春笋般发展,书籍和某些耐用品一般通过二手交易市场或二手群交易。前者流程繁琐,耗时耗力。后者商品质量,售后得不到保障,还容易因为交涉不清引......
  • 2024最新版CorelDRAW新功能揭秘+免费激活攻略!
    在数字图形设计行业,选择合适的工具软件对于提高工作效率和质量至关重要。设计师们追求的不仅仅是基础的绘图和设计功能,更期望软件能提供强大的集成解决方案,以适应不断变化的市场需求。在这样的背景下,CorelDRAW2024作为一款业界领先的矢量图形设计软件,以其全面的升级和新增功能......
  • [Proxy] 使用 Charles 对 Android 应用进行 HTTPS 数据抓包
    抓包工具Charleshttps://www.charlesproxy.com/操作步骤1.在电脑上安装Charles客户端并进行配置1.1设置ProxySetting1.2设置 SSLProxingSetting1.3重启Charles客户端2.在手机上安装Charles证书2.1将手机与电脑连接到同一WIFI网络2.2设置手机WIF......
  • 微信公众号的广告投放实施攻略
    微信公众号作为微信生态的重要组成部分,拥有庞大的用户群体和强大的社交属性。对于企业而言,如何在微信公众号上投放广告,实现精准触达和高效转化,是营销的重要课题。本文将为你提供一份详细的微信公众号广告投放实施攻略,帮助你从零开始,逐步掌握投放技巧。一、定位与选择在投放......
  • android view 扩展方法
    importandroid.view.Viewimportandroid.view.ViewGroupimportandroid.view.ViewGroup.MarginLayoutParamsimportandroid.view.ViewTreeObserverimportandroidx.core.view.marginBottomimportandroidx.core.view.marginLeftimportandroidx.core.view.marginRight......
  • android gson 扩展, 序列化int类型被转double 问题
    importcom.google.gson.Gsonimportcom.google.gson.GsonBuilderimportcom.google.gson.ToNumberStrategyimportcom.google.gson.reflect.TypeTokenimportcom.google.gson.stream.JsonReaderimportjava.io.IOExceptionimportjava.lang.reflect.Typeimportjava.m......
  • android kotlin 小数保留格式化位数
    importjava.math.RoundingModeimportjava.text.NumberFormatimportjava.util.*/**支持设置舍入模式的类型小数*/inlinefunAny?.formatDecimalRoundingMode(decimalDigits:Int=2,roundingMode:RoundingMode=RoundingMode.HALF_UP,failValue:Double=0.0):......
  • android viewbinding 自动填充工具
    `importandroid.content.Contextimportandroid.view.LayoutInflaterimportandroidx.lifecycle.*importandroidx.viewbinding.ViewBindingimportjava.lang.reflect.ParameterizedType/**查找某个类找到带有指定泛型的具体类/fungetGenericSuperclass(clazz:Class<......