分享优化uniapp安卓端从点击app图标到显示启动页需要1-2秒延迟、卡顿的问题

本人原创链接:https://ask.dcloud.net.cn/article/39413

这几天开始接触uniapp开发,发现官方demo安卓端点击app图标到显示启动页(Hbuildx图标页)会卡个1-2秒

明显比原生app体验差很多,作为一个强迫症,这点当然是不能忍的。具体问题详情查看以下链接:

https://ask.dcloud.net.cn/question/133649?notification_id-987295rf-falseitem_id-177937#!answer_177937

先说下大概为什么卡顿的原因,我也不太明白,我猜是因为启动安卓app时需要启动webview或者weex等底层引擎导致的卡顿。(这个问题望官方的人可以解答一下,我看了PandoraEntry的源码也没有找到答案

下面说一下优化原理,就是用原生安卓代码先启动一个页面,然后在该页面中再启动uni的主activity(PandoraEntry)

这样,点击app图标后,就跟原生一样会立马显示我们原生开发的第一个页面(而不会卡个1、2秒才显示界面,让人感觉以为自己没点击图标成功)

下面说下流程

一、在AS中新建一个empty activity:菜单file->new->activity->empty activity。

界面xml代码:

```

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    xmlns:app="http://schemas.android.com/apk/res-auto" 

    xmlns:tools="http://schemas.android.com/tools" 

    android:layout_width="match_parent" 

    android:layout_height="match_parent" 

    tools:context="com.xiefeng.MainActivity"> 

</androidx.constraintlayout.widget.ConstraintLayout>

```

没什么东西,就是一个空白页面

java代码如下:

package com.xiefeng;

import androidx.appcompat.app.AppCompatActivity; 

import android.content.Intent; 

import android.os.Bundle; 

import com.android.simple.R; 

import io.dcloud.PandoraEntry; 

public class MainActivity extends AppCompatActivity { 

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.activity_main); 

        Thread myThread=new Thread(){//创建子线程,启动uni的主activity 

            @Override 

            public void run() { 

                try{ 

                    sleep(1000);//使程序休眠五秒 

                    Intent it=new Intent(MainActivity.this, PandoraEntry.class);//启动MainActivity 

                    startActivity(it); 

                    finish();//关闭当前活动 

                }catch (Exception e){ 

                    e.printStackTrace(); 

                } 

            } 

        }; 

        myThread.start();//启动线程 

    } 

}

二、AndroidManifest.xml修改:

1、在android节点加上主题android:theme="@style/AppTheme2"

2、新增我们自定义的activity并设为main

3、将uni的主activity的main注释掉

完整代码如下:

                      <?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

    package="com.android.simple"> 

    <application 

        android:allowBackup="true" 

        android:allowClearUserData="true" 

        android:icon="@drawable/icon" 

        android:label="@string/app_name" 

        android:largeHeap="true" 

        android:supportsRtl="true" 

        android:theme="@style/AppTheme2"> 

        <activity android:name="com.xiefeng.MainActivity"> 

            <intent-filter> 

                <action android:name="android.intent.action.MAIN" /> 

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

            </intent-filter> 

        </activity> 

        <activity 

            android:name="io.dcloud.PandoraEntry" 

            android:configChanges="orientation|keyboardHidden|keyboard|navigation" 

            android:hardwareAccelerated="true" 

            android:label="@string/app_name" 

            android:launchMode="singleTask" 

            android:screenOrientation="user" 

            android:theme="@style/TranslucentTheme" 

            android:windowSoftInputMode="adjustResize"> 

            <!--<intent-filter> 

                <action android:name="android.intent.action.MAIN" /> 

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

            </intent-filter> 

            --> 

        </activity> 

        <activity 

            android:name="io.dcloud.PandoraEntryActivity" 

            android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize" 

            android:hardwareAccelerated="true" 

            android:launchMode="singleTask" 

            android:permission="com.miui.securitycenter.permission.AppPermissionsEditor" 

            android:screenOrientation="user" 

            android:theme="@style/DCloudTheme" 

            android:windowSoftInputMode="adjustResize"> 

            <intent-filter> 

                <category android:name="android.intent.category.DEFAULT" /> 

                <category android:name="android.intent.category.BROWSABLE" /> 

                <action android:name="android.intent.action.VIEW" /> 

                <data android:scheme="h56131bcf" /> 

            </intent-filter> 

        </activity> 

        <provider 

            android:name="io.dcloud.common.util.DCloud_FileProvider" 

            android:authorities="com.android.simple.dc.fileprovider" 

            android:exported="false" 

            android:grantUriPermissions="true"> 

            <meta-data 

                android:name="android.support.FILE_PROVIDER_PATHS" 

                android:resource="@xml/dcloud_file_provider" /> 

        </provider> 

        <meta-data 

            android:name="dcloud_appkey" 

            android:value="69ae588821d34380d31b94dd33dc0689" /> 

    </application> 

</manifest>

                                                                                                                                                        -->                                                                                                                                                                                     

三、最后在values/styles.xml加上主题:

<style name="AppTheme2" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="android:windowFullscreen">true</item> 

        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 

        <item name="android:windowDrawsSystemBarBackgrounds">false</item> 

        <item name="colorPrimary">#6200EE</item> 

        <item name="colorPrimaryDark">#6200EE</item> 

        <item name="colorAccent">#6200EE</item> 

    </style>

如果要加上自己的启动图片,可以加上节点:<item name="android:windowBackground">@drawable/splash</item>,并把图片放到drawable文件夹下。

建议原生启动图和Hbuildx设置的启动图为同一张,这样两张启动图无缝对接,体验比较好。

(注:加上启动图后启动会更慢个0.1秒不知道为什么,希望大神们解答一下)

完毕。

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

推荐阅读更多精彩内容