启动画面的时间比应该的长

时间:2018-04-17 07:29:43

标签: android user-interface splash-screen lag

我的启动画面只包含TextView,此启动画面的持续时间为500毫秒。但是我的启动画面大约需要4秒才能完成并进入主要活动。如果我删除了启动画面,MainActivity本身需要4-5秒才能显示内容。 MainActivity包含custom background(image from drawable - 1280x720)tablayout with 6 tabs。每个标签包含recyclerview,包含文字和图片。打开MainActivity后,所有视图都会在瞬间显示。所以基本上,我的UI有点滞后。设置MainActivity后,一切正常。注意:这只发生在oreo。在牛轧糖及其下方,飞溅大约需要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);

    }

}

3 个答案:

答案 0 :(得分:0)

我认为你的MainActivity的onCreate方法中发生了很多事情。这很容易导致您的应用缓慢。

最好的选择是花时间在后台线程中完成任务。

答案 1 :(得分:0)

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

  1. 检查两个设备中的API响应时间(理想情况下应该如此) 相同)
  2. 减速的最常见原因是您正在使用与低版本兼容的某些组件或代码 不支持更高版本。

答案 2 :(得分:0)

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