应用启动时的初始化代码放置问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HMSQQbA
V2EX    Android

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

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

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

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

    目前只能想到 3 个选择:

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

    • 专门做一个 Actvity 作为 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 就知道了,很多都没加固过。
    rb6221
        2
    rb6221  
       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.才能申请各种权限

    就这个流程就行了
    HMSQQbA
        8
    HMSQQbA  
    OP
       2021-05-18 17:58:39 +08:00
    感谢各位回复,最开始我尝试将初始化代码放到 Application 里,但是我忘记了当用户退出所有 Activity 时 Application 对象不会销毁,导致一些与预期不符的现象。(下次启动时 Application 对象被重用)看来这方面的设计还要考虑一下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3766 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:52 PVG 08:52 LAX 17:52 JFK 20:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86