本人原创链接: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代码:
```
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">
```
没什么东西,就是一个空白页面
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注释掉
完整代码如下:
package="com.android.simple"> 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"> 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"> 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"> android:name="io.dcloud.common.util.DCloud_FileProvider" android:authorities="com.android.simple.dc.fileprovider" android:exported="false" android:grantUriPermissions="true"> android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/dcloud_file_provider" /> android:name="dcloud_appkey" android:value="69ae588821d34380d31b94dd33dc0689" />
-->
三、最后在values/styles.xml加上主题:
如果要加上自己的启动图片,可以加上节点:
建议原生启动图和Hbuildx设置的启动图为同一张,这样两张启动图无缝对接,体验比较好。
(注:加上启动图后启动会更慢个0.1秒不知道为什么,希望大神们解答一下)
完毕。