У меня очень простая первая активность в моем приложении, которая является «всплеском». Он отображает только изображение, и после небольшой анимации он запускает основное действие моего приложения.Первое занятие, которое занимает много времени для отображения
Проблема в том, что эта первая активность всплеска занимает огромное количество времени для отображения, если приложение не находится в памяти. Я имею в виду, если я полностью уничтожу приложение из памяти и начну его с нуля, не будучи в недавнем списке приложений SO.
Для отображения содержимого мероприятия требуется 3-4 секунды. За эти 3-4 секунды я могу видеть темный экран (не 100% черный) со стандартным черным фоном стиля системы, а не цветной цветной цвет BLACK.BLACK, поэтому время, затрачиваемое на загрузку первого приложения проводится до отображения активности.
Почему так много всего начинается? Может быть, для моих зависимостей в файле gradle?
Это мои Gradle зависимости:
dependencies {
compile 'com.google.android.gms:play-services-ads:9.0.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
}
Это простой всплеск активности. Я также попробовал комментировать AdManager.getInstance().initAd(this);
, чтобы узнать, разрешает ли он проблему. Это займет немного меньше времени, если эта строка будет прокомментирована. Эта строка инициализирует admob. Но у меня все еще есть проблема.
public class Splash extends Activity {
private AnimatorSet set;
private boolean backPressed;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdManager.getInstance().initAd(this);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int sh=dm.heightPixels;
int sw=dm.widthPixels;
ImageView splash = new ImageView(getApplicationContext());
splash.setLayoutParams(new LayoutParams((int) (sw*0.9), LayoutParams.WRAP_CONTENT));
splash.setImageResource(R.drawable.logo);
//contenemos la ImageView header dentro de un layout para asi cambiar el color de fondo y que sea el mismo que el de la imagen.
LinearLayout headerll = new LinearLayout(this);
RelativeLayout.LayoutParams headerllParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, sh/20);
headerll.addView(splash);
splash.setPadding(10, 10, 10, 10);
headerll.setLayoutParams(headerllParams);
headerll.setBackgroundColor(Color.BLACK);
headerll.setGravity(Gravity.CENTER);
setContentView(headerll);
set = new AnimatorSet();
ObjectAnimator in = ObjectAnimator.ofFloat(splash, "alpha", 0f, 1f);
in.setDuration(2000);
in.setInterpolator(new AccelerateInterpolator());
ObjectAnimator delay = ObjectAnimator.ofFloat(splash, "alpha", 1f, 1f);
delay.setDuration(1000);
ObjectAnimator out = ObjectAnimator.ofFloat(splash, "alpha", 1f, 0f);
out.setDuration(2000);
out.setInterpolator(new AccelerateInterpolator());
set.addListener(new AnimatorListener() {
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
finish();
Intent i = new Intent(Splash.this, MainActivity.class);
startActivity(i);
}
@Override
public void onAnimationRepeat(Animator animation) {}
@Override
public void onAnimationStart(Animator animation) {}
});
set.playSequentially(in,delay,out);
set.start();
}
@Override
public void onBackPressed() {
super.onBackPressed();
backPressed=true;
set.cancel();
}
}
Насколько велик ваш образ? – Stefan
очень маленький, что-то вроде 100x400 – NullPointerException
Может быть, код DisplayMetrics потребляет время для вычисления ширины и высоты, другой причиной могут быть анимации. Попробуйте добавить анимационный код в метод onStart(). – Apurva