现在基本上每个app都有自己的引导页或者欢迎界面,用来展示公司logo或者广告浏览、也有一些产品需求是达到一定的界面美化,做一个闪屏界面再进入主界面。不至于显示内容太过突兀。
项目需求最终应该实现效果:
1、用户刚安装apk,进入应用跳转欢迎界面。
2、应用被完全杀死,再进入应用,跳转欢迎界面
3、使用期间,如果应用在后台运行,再次进入程序,不显示欢迎界面
4、(冷启动修复)进入主界面等待时间减短30%。(巧用欢迎界面)
5、MainActivity必须具有桌面属性。
实现功能不难,但是根据不同的项目有不用的需求。
普遍的创建一个SplashActivity。这个应用作为起始页。
方式一:SplashActivity+Timer计时器
由于需要设置3秒后跳转主界面,进行耗时操作,Timer里面已经创建子线程,使用handler处理。
如果觉得有必要,可以在onDestory()进行计时器的销毁。
方式二:SplashActivity+Handler
其实原理和Timer计时器差不多,都是使用创建handler在子线程里面进行耗时操作。
方式三:MainActivity+标志位
需求增加,需要设置Mactivity.class为launcher桌面属性,所以起始页不能是SplashActivity欢迎界面。sp存储标识位,或者全局定义标识位。
就是说MainActivity里面必须设置为LAUNCHER,而不能在SplashActivity里面设置该属性:
所以,很多人就会想到,虽然刚开始启动的是MainActivity主界面,可以在里面设置一个值判断是否已经显示过一次(这个值可以作为全局常量或者保存到SP中)。
方式四:SplashActivity+SharedUtils+标志位
除了正常的欢迎界面,这里做了一个优化,就是新建了一个SharedUtils的activity.
利用SharedUtils 进行判断先跳转到那个界面。如果获取到的str为空,说明欢迎界面之前没有跳转过。即跳转SplashActivity.反之跳转到,主界面MainActivity
然后在Application里面进行初始化。
最后要在AndroidManifest.xml里面定义activty.
上面的方法我觉得都存在又一些瑕疵,一方面使用持久化存储占用一点内存,一方面声明一个Activity降低代码的简洁。
延伸:系统在运行apk的时候首先执行application的SharedUtils初始化,就会执行SharedUtils,在里面判读标识位状态,进行拦截跳转到对应的Activity
方式五 推荐:Theme替换
上面的代码除了SplashActivity.activity,其他的代码删除。
然后app的style文件里面定义
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!