Android 启动屏幕花费的时间比它应该花费的时间长

Android 启动屏幕花费的时间比它应该花费的时间长,android,user-interface,splash-screen,lag,Android,User Interface,Splash Screen,Lag,我有一个仅包含TextView的启动屏幕,此启动屏幕的持续时间为500毫秒。但是我的启动屏幕大约需要4秒钟才能完成并进入主要活动。如果我删除启动屏幕,则main活动本身需要4-5秒来显示内容main活动包含一个自定义背景(来自drawable-1280x720的图像),一个带有6个选项卡的表格布局。每个选项卡都包含带有文本和图像的recyclerview。打开main活动时,所有视图都会在瞬间显示。所以基本上,我的UI有点滞后。设置main活动后,一切正常。注意:这只发生在奥利奥。在牛轧糖及以下

我有一个仅包含
TextView
的启动屏幕,此启动屏幕的持续时间为500毫秒。但是我的启动屏幕大约需要4秒钟才能完成并进入主要活动。如果我删除启动屏幕,则
main活动
本身需要4-5秒来显示内容
main活动
包含一个
自定义背景(来自drawable-1280x720的图像)
,一个带有6个选项卡的
表格布局
。每个选项卡都包含带有文本和图像的
recyclerview
。打开
main活动
时,所有视图都会在瞬间显示。所以基本上,我的UI有点滞后。设置
main活动后,一切正常。注意:这只发生在奥利奥。在牛轧糖及以下食品中,飞溅时间约为1秒,
MainActivity

我面临的问题是什么

启动屏幕:

public class splash extends BaseActivity {



private String[] permissionsRequired = new String[]{
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.CAMERA};

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_activity);

    checkUserPermission();

}




public void DisplaySplashScreen() {


    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

            Intent i = new Intent(splash.this, MainActivity.class);
            startActivity(i);
            finish();

        }
    }, 500);

}



private void checkUserPermission(){
    if(Build.VERSION.SDK_INT>=23){
        if(ActivityCompat.checkSelfPermission(this, permissionsRequired[0]) != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, permissionsRequired[1]) != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this,permissionsRequired[2])!=PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this,permissionsRequired[3])!=PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA},123);
            return;
        }
    }

    DisplaySplashScreen();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 123:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(splash.this, "Welcome", Toast.LENGTH_SHORT).show();
                DisplaySplashScreen();
            }else{
                Toast.makeText(this, "Needs permission to go ahead", Toast.LENGTH_SHORT).show();
                checkUserPermission();
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    }

}

我认为在MainActivity的onCreate方法中发生了很多事情。这很容易导致应用程序运行缓慢


最好的选择是将耗时的任务放在后台线程中。

不同版本的Android性能不同。在您的情况下,可能有两个原因-

  • 检查两个设备中的API响应时间(理想情况下应该是 (相同)
  • 最常见的减速原因是您使用的组件或代码与低版本兼容,并且不兼容 不支持更高版本

  • 在阅读了其余的代码后,我看不到任何导致这种行为的原因,因此我建议您对MainActivity中的所有代码进行注释,并尝试在启动屏幕后加载一个空代码,如果仍然很慢,那么您将使用100%的API,如果它被修复了,那么就一块一块地取消对代码的注释,直到它再次变慢,然后您就能够知道是哪部分代码导致了这种变慢。有时发现问题可能很棘手,但一旦发现问题,就更容易解决。

    您可以使用Jake Wharton提供的Hugo库来确定哪个函数需要很长时间才能执行。请从MainActivity发布您的onCreate方法!当然请稍等。一个小提示总是使用CamelCase,尤其是对于您的类名:)因此,让它成为Splash而不是Splash,当然这与您的问题无关,这是一个新的、值得了解的问题。谢谢!:)但为什么奥利奥和牛轧糖会有时差呢?两者应该有相同的执行时间。我使用的两款安卓设备的规格都相同。但这取决于设备的处理。我将尝试更新库!谢谢你的回复,我会尽力找出问题所在。我会尽快回复你的!