经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
app启动页优化
来源:cnblogs  作者:翻滚的咸鱼  时间:2021/3/1 8:41:57  对本文有异议

有很多app启动页还是老一套的splashactivity,然后跳转到mainactivity,首先splash加载了一遍数据,然后进入到main之后也会加载数据,所以导致两次加载都要等待,如果反过来呢

这里可以先加载mainactivity,然后在去触发splashactivity,当然,这样也有缺陷,有的main中可能加载数据量大,会导致进入splash之前卡顿,所以一般是在同一个布局中,把splashactivity变成splashfragment

这样布局中默认的就是splash页了,然后main中的数据也在同时得到了加载,等splash结束后一般main已经初始化完全了,所以不用在次加载,可以直接显示出来,这一步就节省了大量的等待时间,比其它花里胡哨的优化实用有效多了

 

实现也比较简单,在你原来的MainActivity布局中添加一层布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools">
  5.  
  6. <data>
  7.  
  8. <variable
  9. name="model"
  10. type="com.strong.ui.MainViewModel" />
  11. </data>
  12.  
  13. <FrameLayout
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent">
  16.  
  17. <androidx.constraintlayout.widget.ConstraintLayout
  18. android:layout_width="match_parent"
  19. android:layout_height="match_parent">
  20.  
  21. <androidx.viewpager2.widget.ViewPager2
  22. android:id="@+id/viewPager"
  23. android:layout_width="match_parent"
  24. android:layout_height="@dimen/dp_0"
  25. app:layout_constraintBottom_toTopOf="@+id/lin_bottom"
  26. app:layout_constraintTop_toTopOf="parent" />
  27.  
  28. <com.strong.ui.view.menu.BottomMenuView
  29. android:id="@+id/lin_bottom"
  30. android:layout_width="@dimen/dp_0"
  31. android:layout_height="wrap_content"
  32. android:background="@color/white"
  33. android:clipChildren="false"
  34. android:clipToPadding="false"
  35. android:orientation="horizontal"
  36. app:layout_constraintBottom_toBottomOf="parent"
  37. app:layout_constraintEnd_toEndOf="parent"
  38. app:layout_constraintStart_toStartOf="parent" />
  39.  
  40. </androidx.constraintlayout.widget.ConstraintLayout>
  41.  
  42. <FrameLayout
  43. android:id="@+id/fl_splash"
  44. android:layout_width="match_parent"
  45. android:layout_height="match_parent"
  46. tools:visibility="gone" />
  47.  
  48. </FrameLayout>
  49. </layout>
View Code

然后把splashfragment动态添加到容器中

 

这样启动页就默认显示执行了

然后模拟加载数据完成后关闭启动页,splashfragment移除后直接显示mainactivity布局

  1. class SplashFragment : BaseBindFragment<FragmentSplashBinding, SplashViewModel>() {
  2. override fun layoutId() = R.layout.fragment_splash
  3. override fun providerVMClass() = SplashViewModel::class.java
  4. override fun initData(bundle: Bundle?) {
  5. binding.model = mViewModel
  6. //模拟加载图片
  7. var count = 0f
  8. val mHandler = Handler(Looper.getMainLooper())
  9. val mRunnable = object :Runnable {
  10. override fun run() {
  11. count+=20
  12. binding.pbTime.setProgress(count)
  13. if (count >= binding.pbTime.getMax()) {
  14. mHandler.removeCallbacks(this)
  15. activity!!.window.setBackgroundDrawableResource(R.color.white)
  16. //移除启动页
  17. activity!!.supportFragmentManager.beginTransaction().remove(this@SplashFragment).commitAllowingStateLoss()
  18. }else{
  19. mHandler.postDelayed(this,500)
  20. }
  21. }
  22. }
  23. mHandler.postDelayed(mRunnable,500)
  24. }
  25. }
View Code

如果mainactivity中加载量过大在优化自己的启动加载流程,这样是不是加载不卡顿也省了加载时间

github:https://github.com/1024477951/KotlinStrong

原文链接:http://www.cnblogs.com/LiuZhen/p/14448055.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号