启动优化·浅谈花哪儿记账在启动时的那些事

前言

花哪儿记账是一款相当简洁易用的记账工具,在功能的开发和设计上保持了相当高的克制,也正因为如此,在开发花哪儿记账的时候是没有设计广告闪屏这个元素的,启动APP会直接进入主界面,但是在主界面中会直接从数据库中读取用户记账的数据,当用户使用久了的时候就会产生大量的数据,那么此时就需要加快软件的启动速度了。那么本章我就讲讲如何加快APP的启动速度,即启动优化方向的一些技巧。

问题在哪儿?

先来谈谈问题出在哪。
1.由于很多SDK的加入,造成启动效率降低。
2.数据加载的问题,即大量的数据从SQLite数据库中加载出来时会导致软件在启动时出现严重卡顿现象,降低用户体验。

解决它!

首先,我们常常将SDK的载入放在Application里进行的,这没毛病,但要知道,若是SDK半天载入不了,往往就会造成卡顿了,我们想出了一个好办法,就是先让界面显示出来,在使用前把SDK给载入完成了,不就万事大吉了?
于是,我们将载入SDK的代码放在这里:

public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);    //载入布局

        //载入SDK
        SDK.initialize(getApplicationContext());
        ......
    }
    ......
}

然而事实是骨感的,打开APP,从点击图标到进入还是蛮流畅的,但是Activity的显示出现了白屏问题。同样的,如果直接在Activity的onCreate里加载用户数据,即从数据库中读取用户的账单显示到屏幕上,也会造成严重的卡顿,白屏出现,那么接下来,我们就需要解决白屏问题了。

白屏问题的出现,主要是因为在布局加载到屏幕完成前加载了这些数据,导致布局无法呈现到屏幕上来。此时系统没有什么可显示的,就只好显示了一个白屏给我们了,那么,延迟加载数据不就可以了么?在这里,我们尝试使用多线程的方法来解决这个问题:

public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);    //载入布局

        new Handler().postDelayed(new Runnable() {
                    public void run() {
                      //载入SDK
                      SDK.initialize(getApplicationContext());
                      //加载数据
                      ......
                    }
        }, 10);
        ......
    }

果不其然,问题解决了,一点击图标就直接呈现了界面布局,然后数据会逐步加载进来。但是这样子也存在一个问题,即用户一点击图标,显示的布局因为没有数据就会出现错乱的问题,在花哪儿记账APP中,因为存在用户消费正常、快超支、已超支三种状态(如下图所示),界面样式若是一样的并不合适,因为用户若消费已超支,界面应该是红色的,但一打开APP却是默认蓝色界面,然后一闪变成了红色,那么该如何处理这样的问题呢?

花哪儿各状态示意图.png

于是我们将用户消费的状态记录起来,在软件启动后仅修改UI部分载入的主题,基本上解决了这个问题。

测试与总结与坑...这就完了?

too young,怎么会完了?一大堆bug等着你哼哼
如此修改后确实存在着一些需要注意的问题,例如用户打开应用瞬间退出了怎么办?这可是多线程的啊,APP退了不代表线程不继续执行,于是乎在这里就翻车了...搞个线程锁,把这事儿解决了,说出来是给大家提个醒,别开开心心的忘记加锁在这里崩掉。

完了?没呢

对于不用更改UI布局的APP来说其实有个更简单粗暴的办法能提升APP的启动速度:先将没有数据的界面截个图做一个占位图(如下图所示)

占位图.png

然后创建一个启动Activity,例如FristActivity,进入style.xml,添加以下主题:

<style name="welcomeTheme" parent="@android:style/Theme.Material.NoActionBar.Fullscreen" tools:targetApi="lollipop">
        <item name="android:windowBackground">@drawable/你的启动占位图</item>
</style>

接下来进入AndroidManifest.xml,修改FirstActivity的信息,设置其android:theme为“welcomeTheme”:

......
        <activity
            android:name=".FirstActivity"
            android:screenOrientation="portrait"
            android:theme="@style/welcomeTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

进入FirstActivity中,去掉onCreate方法中的如下语句:

//setContentView(R.layout.activity_first);

在FirstActivity的onCreate方法中写一个多线程,尽情加载SDK啥的吧,然后加载完了,跳转到你的真正主界面,注意跳转需要取消掉动画效果:

startActivity(new Intent(me, MainActivity.class));
int version = Integer.valueOf(android.os.Build.VERSION.SDK);
if (version > 5) {
     overridePendingTransition(0, 0);
}
finish();

以上就是根据花哪儿记账这一项目开发过程中诞生的完整的启动优化实例解析,如果文中存在任何疑问欢迎在下边评论留言,如果这篇文章真的对你有帮助,欢迎收藏点赞和打赏。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容