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,当然这与您的问题无关,这是一个新的、值得了解的问题。谢谢!:)但为什么奥利奥和牛轧糖会有时差呢?两者应该有相同的执行时间。我使用的两款安卓设备的规格都相同。但这取决于设备的处理。我将尝试更新库!谢谢你的回复,我会尽力找出问题所在。我会尽快回复你的!