Android 如何优化启动页加载速度SplashActivity

    作为Android 开发工程师,面对不同品牌的手机,还有各种高低档位,高低内存的手机进行适配,是一件非常麻烦的事情,其实有时候感觉比IOS,我们Android 工程师要做的事情多很多.

    做启动页的时候,就要考虑这些情况:

  1. 如何把内存控制在最小范围
  2. 如何快速的加载
  3. 如何使他不会卡顿(因为在正式发布后,一些低版本的手机,打开启动页,就会闪退,或者卡顿,在高版本手机上,就不会存在这样的情况)
  4. 如何让图片放入资源文件的时候更小,有时候一张高清度的图片,可以达到6-6M,如果事前不进行处理,会直接增大apk的,版本发布后体积

   解决办法:

  1. 在公司情况允许的条件下,尽量让UI采用颜色浅一点的启动页,深色的启动页会直接增大APK的体积,然后页面做的简单点.
  2. 做出来的图片,先对其在线进行压缩  
    1. https://tinypng.com/   该网站只支持图片小于5M的图片,超过了要给钱才能进行压缩
    2. http://optimizilla.com/zh/   大于5M用这个压缩下,压了之后还感觉比较大,继续用上面的进行压缩.
    3. 一般这样做之后,图片可以做到70-90%左右的压缩率
  3.    给启动页单独设置一个主题背景, 这样可以做到App启动的时候秒开的效果,而不是在他的xml文件直接放置一张图片做背景
  4.   一般启动页都会有一个定时,为了是给后面的页面启动留点时间.
  5. 定时的handler 尽量采用如图下的方式,进行消息发送,并在页面销毁的时候,清空掉队列中的消息.好避免handler内存泄露问题出现.handler也必须设置为静态,(即使这样,也会有一些内存泄露的情况,完全没有,那是非常难的)

 代码如下:

1.清单文件:

 <application
        android:name=".app.BaseApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:persistent="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".ui.activity.SplashActivity"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
..................

2.  style.xml文件:

   <!--Theme.PageIndicatorDefaults-->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:background">@drawable/background_splash</item>
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowFullscreen">true</item>
    </style>

3.activity

public class SplashActivity extends AppCompatActivity {

    private static MyHandler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {     //启动模式
            finish();
            return;
        }
        final Boolean isLogin 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值