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

应用启动时的初始化代码放置问题

  •  
  •   HMSQQbA · 2021-05-06 20:43:22 +08:00 · 7962 次点击
    这是一个创建于 1288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚接触安卓开发,很多地方不太懂

    在应用启动时往往需要进行初始化工作,如连接数据库等。这些代码应该放在哪里合适呢?

    目前只能想到 3 个选择:

    • 继承 Application 类,放在它的 onCreate() 方法里。缺点是如果初始化失败,程序需要退出,无法通过对话框显示错误信息(貌似显示对话框必须要 Activity Context )

    • 专门做一个 Activity 作为 splash 界面,顺便运行初始化代码。缺点是应用被回收再复原时可能出问题

    • 放在入口 Activity 的 onCreate 方法中。(这样做有什么缺点?)

    在 stackoverflow 等地搜了半天,没看到几个相关问题,也几乎没有讨论

    希望大佬赐教,谢谢!

    8 条回复    2021-05-18 17:58:39 +08:00
    limuyan44
        1
    limuyan44  
       2021-05-06 20:59:22 +08:00
    下几个主流的 app 就知道了,很多都没加固过。
    janus77
        2
    janus77  
       2021-05-06 21:05:47 +08:00
    都可以,图方便就第一种
    Jirajine
        3
    Jirajine  
       2021-05-06 21:08:02 +08:00 via Android
    main activity 的 onCreate 就可以了,当然复杂点的应用 main activity 就是一个 splash 界面。
    CEBBCAT
        4
    CEBBCAT  
       2021-05-06 21:51:25 +08:00 via Android
    Java 不记得多少知识了,想问一下测试的时候 onCreate 会不会被调用?如果是的话好像不怎么便于单元测试
    Nuttertoo1s
        5
    Nuttertoo1s  
       2021-05-06 22:17:07 +08:00
    jetpack 有个组件专门用来管理初始化,Application 类讲道理是不会初始化失败的,很多第三方 SDk 都是要求在 Application 里进行初始化
    ikas
        6
    ikas  
       2021-05-07 09:51:52 +08:00
    没必要搞个 splash,放到 Application 就是最简单的,可以搞定所有组件的初始化依赖.缺点是,不管启动什么组件都需要执行初始化,不过你可以进行判断,只初始化需要的.
    kingiis
        7
    kingiis  
       2021-05-07 13:28:16 +08:00
    分级咯
    全局实例级别的扔 application 里 从 splash 去初始化
    1.确认你获得了用户授权 就那个 隐私协议 用户协议之类的
    2.才能申请各种权限
    3.开始初始化各种全局实例

    就这个流程就行了
    HMSQQbA
        8
    HMSQQbA  
    OP
       2021-05-18 17:58:39 +08:00
    感谢各位回复,最开始我尝试将初始化代码放到 Application 里,但是我忘记了当用户退出所有 Activity 时 Application 对象不会销毁,导致一些与预期不符的现象。(下次启动时 Application 对象被重用)看来这方面的设计还要考虑一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:53 · PVG 10:53 · LAX 18:53 · JFK 21:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.