我的启动画面只包含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);
}
}
答案 0 :(得分:0)
我认为你的MainActivity的onCreate方法中发生了很多事情。这很容易导致您的应用缓慢。
最好的选择是花时间在后台线程中完成任务。
答案 1 :(得分:0)
性能因Android版本而异。在您的情况下,可能有两个原因 -
答案 2 :(得分:0)
在阅读完其余代码之后,我看不到任何导致此行为的内容,因此我建议您评论MainActivity中的所有代码,并尝试在启动屏幕后加载一个空代码,然后如果它仍然是慢,它将是你使用的100%API,如果它被修复然后去逐个取消注释你的代码,直到它再次变慢然后你将能够知道代码的哪一部分导致这么慢。找到问题有时会很棘手,但一旦找到它就会更容易解决。