HedyPlayer 的诞生

作者: 北国雪WRG | 来源:发表于2018-07-26 22:06 被阅读8次

闲来无事,想写一个Android平台的音乐播放器。取名叫HedyPlayer,意为Happy every day !并在简书上跟进该app的成长日记。主要还是记录遇到的问题和解决的方法。很希望在我毕业的时候,这个APP能成为我梦想中的样子。emmm,梦想还是要有的,万一实现了呢?

话不多说,以下是今天遇到的问题。

Q1. 闪图(SplashActivity 白屏问题)
Q2. 虚拟键的隐藏
Q3. 闪屏的睡眠
Q4. back键又返回到了闪屏activity

Q1 闪图短暂的白屏

其实白屏的时间十分短暂,但是确实是可以感觉的到。可以发现大公司的APP是没有这个短暂的白屏的。
问题出现在哪儿呢?我们可以运行一下下面这段代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
         long startTime = System.currentTimeMillis();

        setContentView(R.layout.activity_splash);
        long endTime = System.currentTimeMillis();
        long time = endTime - startTime;
        Log.d("SplashActivity", "time:" + time);

        // SplashActivity time = 0.1 s

在我的手机上测试,控制台显示的时间是0.1s。看来加载布局文件还是需要一些时间的。要想去掉白屏,我们就应该尽可能早的加载布局文件,至少是闪图。
其实,仔细观察你会发现,白屏并不是整个activity都是白的。其实activity的主题瞬间就加载出来了,只是background是白的。那么我们将闪图放入主题的background是不是就解决了白屏!

  1. 我们先在styles.xml 中定义一个叫Splash的主题,继承于Theme.AppCompat.Light.NoActionBar,这样这个主题没有ActionBar了。
    <style name="Splash" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@drawable/splash_word</item>
    </style>
  1. 在AndroidManifest.xml 文件中使用上面定义的样式表。其实就是将theme设置为@styles/Splssh
       <activity
            android:name=".SplashActivity"
            android:theme="@style/Splash">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  1. 现在闪图就会随着主题一起加载了,我们就可以把setContentView注释掉了。

参考:Android欢迎页短暂白屏问题以及解决方案

Q2隐藏导航栏

如果手机的导航栏是白色的话还OK,但是有些手机的导航栏是黑色的。强迫症还是想隐藏导航栏。在onCreate中添加一下代码就行View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;表示在这个activity中永久隐藏导航栏,以达到沉浸式效果。

        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_IMMERSIVE;
        getWindow().setAttributes(params);

Q3 闪屏的睡眠

如何让闪图停留两秒呢? 我的最初想法是在onCrete生命周期中调用Thread.sleep(2000);。其实没有setContentView方法下效果还行。但是隐藏的导航栏就失效了。究其原因还是你主线程让activity在onCreate下休眠2s,参考活动的生命周期的可见性。onCrete并不是可见生命周期。也就是说,你在UI还没有加载之前休眠了2s,如果有setContentView方法你就会发现UI会白屏两秒钟。这是不能忍受的。

activity生命周期.jpg

解决方法是使用消息队列

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(intent);
                finish(); // 结束闪屏activity,防止栈倒退
            }
        },2000);

我们在onCrete生命周期中添加上述代码。意思为创建一个开启新activity线程但是等待2秒才提交。这样的话就OK了。

Q4 back键又返回到了闪屏activity

闪屏结束了,我们按back键,闪屏的界面又出来了。这是因为back键执行的是弹栈操作。系统将activity栈中的最顶上的栈弹出,也就是闪屏。我们只需要将其finish() 掉就行了,代码见Q3。

相关文章

  • HedyPlayer 的诞生

    闲来无事,想写一个Android平台的音乐播放器。取名叫HedyPlayer,意为Happy every day ...

  • 《演员的诞生》?戏精的诞生

    浙江卫视推出的综艺节目《演员的诞生》本着以“演技为视角,为有实力的普通演员和追梦人们搭建一个与业界大拿面对面切磋的...

  • 演员的诞生2.0——《编剧的诞生》

    演员的诞生2.0——《编剧的诞生》北京区线下预热小活动; 这个世界编剧的稀缺更甚与演员的稀缺 虽然感谢演员的诞生这...

  • 自我的诞生 笔记——动力的诞生

    全能自恋型本我,容易构成别人 绝对禁止性超我,是别人拥有 软踏踏的自我 动力分类:1身体的需求和欲望,2头脑的观念...

  • 母亲

    宇宙 诞生 银河 银河又诞生 星宿 星宿才诞生 你我 ——命运的宠者

  • 诞生

    沉默可能产生误解,我需要说话;说话将我推向歧途,我必须沉默。 ——赫塔·米勒《国王鞠躬,国王杀人》 呼吸架...

  • 诞生

    “哄”,天上乌云滚滚,雷声大作只听一声婴儿叫打破了嘈杂声。 “太好了,我可以当爸爸了!”梦吴说到。他抱起那又小又可...

  • 《诞生》

    拿一把剪刀 从诗集中剪下几句话 然后拼在一起 一首新诗由此诞生

  • 诞生

    “夫人,快!再用点力,孩子的头出来了!”一位中年男人说着“啊!”生孩子的女人此刻满脸痛苦,终于将孩子生了出来。...

  • 诞生

    幸运的人 诞生在出生的那一天 经历过 童年 童趣 少年 青春 一步一步逼近的时光光影 终结在终结的那一天 有的人 ...

网友评论

    本文标题:HedyPlayer 的诞生

    本文链接:https://www.haomeiwen.com/subject/semvmftx.html