账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    android app在后台被kill,再次打开app恢复Activity导致崩溃的问题
    71
    0

    前置条件:

    1. app在后台被kill,再次点击app能够恢复到之前的Activity执行onCreate(这是Android系统特性)
    2. 我们一般会自定义Application的onCreate中执行一些框架的初始化

    场景:
    打开app运行:Activity A -> Activity B -> Activity C,其中Activity C是一个本地相册,用的是图片加载框架ImageLoader,点击Home退到后台,过一段时间由于低内存app被kill,在最近打开中打开app,Activity C执行onCreate直接闪退。 原因:

    E/uncaughtException: java.lang.IllegalStateException: ImageLoader must be init with configuration before using

    像这样的问题还有很多,因为很多初始化需要放在Application的onCteate。 如何解决?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 无就将法 普通会员 1楼

      在Android应用程序中,如果后台被杀死并重新打开应用后,由于存在"应用程序退出"、"系统内存泄漏"等异常情况,可能引发Activity的崩溃。以下是可能的原因和解决方法:

      1. 应用程序退出
      2. **已结束应用】ActivityFragment的生命周期管理不当,如未正确关闭资源或结束耗时操作。例如,Fragment在生命周期结束时没有清理内存,导致内存泄漏,导致应用在后台被杀死时无法重新启动。
      3. **恶意攻击或恶意软件】恶意应用可能通过非法手段阻止或终止您的应用程序的后台运行,例如通过阻止AndroidManifest.xml中的android:exported属性设置为false,或者通过使用Thread.sleep()方法长时间运行耗时操作,导致应用在后台被杀死时无法重新启动。
      4. 系统内存泄漏

        • **系统内存泄露是Android 7.0(API Level 24)及以上版本引入的新问题。该版本引入了内存泄漏检测和修复机制,通过在Activity和Fragment生命周期中添加垃圾回收,可以检测和清理内存泄漏。如果没有正确清理内存,Android可能会在后台被杀死后导致应用崩溃。
        • Java GC机制失效:在某些情况下,由于程序中出现大量临时对象或弱引用,可能导致内存泄漏。可以尝试手动释放不再需要的内存对象,或者使用垃圾回收工具(如java.util.concurrent包下的GarbageCollector类)进行垃圾回收。
      5. 系统内存泄漏

      6. 尝试清理缓存和数据集

        • 在Fragment或Activity中,如果涉及到持久化数据,如数据库连接、文件、本地存储等,可以尝试在onDestroy()onPause()方法中清理相关缓存和数据集,以释放系统内存。
        • 定期清理垃圾文件
        • Android的垃圾回收机制默认在应用进入后台时进行,但用户可以选择在运行时进行内存清理,例如在onCreate()方法中添加onTrimMemory()onLowMemory()方法,这些方法会在应用进入后台时清理相关内存。
      7. Android进程过载

      8. **Android 5.0(API Level 16)以下版本,Android系统默认会根据内存空间自动关闭一些不需要的进程,如后台运行的Photos或Google Play Services等,这可能导致Activity在后台被杀死后无法重新启动。
      9. 系统资源消耗过大

        • 如果在应用中存在高耗能的操作,如图片加载、视频播放、数据库查询等,可能导致系统资源耗尽,导致应用在后台被杀死后无法重新启动。
        • 应用程序服务过载
        • 如果在应用中存在大量依赖于网络的后台服务,如天气应用的天气查询、地图应用的定位服务等,可能导致应用程序服务过载,导致系统资源耗尽,进而导致Activity在后台被杀死后无法重新启动。
      10. 权限问题

      11. 如果在后台运行的活动中,需要某些权限,如读取联系人、访问位置等,但没有正确申请或设置权限,可能导致Activity在后台被杀死后无法重新启动。
      12. 使用系统的销毁机制
        • 在Android 5.0(API Level 16)及更高版本中,系统默认会在应用进入后台时销毁所有不必要的系统资源,包括应用、后台进程和任务,但有些应用程序可能使用了系统的销毁机制,导致Activity在后台被杀死后无法重新启动。

      为了预防和解决这些问题,可以遵循以下建议:

      • 遵循Android开发最佳实践,例如在生命周期中正确关闭资源、释放内存、设置垃圾回收参数等,以减少内存泄漏风险。
      • 定期进行内存泄漏检测和修复,使用垃圾回收工具或手动清理内存,确保Activity在后台运行时内存充足。
      • 限制应用中高耗能的操作,例如只在必要时使用网络服务,避免长时间等待加载数据或网络请求。
      • 合理使用应用程序服务,避免过度依赖于特定服务,尽可能选择依赖于网络的轻量级服务,以减少系统资源消耗。
      • 使用权限管理,确保在需要时申请和设置必要的权限,避免因权限冲突导致Activity在后台被杀死后无法重新启动。
      • 定期清理应用程序缓存和数据集,确保数据的正确性,避免数据错误导致的Activity崩溃。

      通过遵循上述建议,可以有效避免Activity在后台被杀死后无法重新启动的问题,确保应用程序的稳定性和用户体验。如果在应用中频繁出现上述问题,建议进行更深入的代码审查和性能测试,找出并修复可能存在的问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部