2016-08-16 1 views
1

У меня очень простая первая активность в моем приложении, которая является «всплеском». Он отображает только изображение, и после небольшой анимации он запускает основное действие моего приложения.Первое занятие, которое занимает много времени для отображения

Проблема в том, что эта первая активность всплеска занимает огромное количество времени для отображения, если приложение не находится в памяти. Я имею в виду, если я полностью уничтожу приложение из памяти и начну его с нуля, не будучи в недавнем списке приложений 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(); 
    }    
} 
+0

Насколько велик ваш образ? – Stefan

+0

очень маленький, что-то вроде 100x400 – NullPointerException

+0

Может быть, код DisplayMetrics потребляет время для вычисления ширины и высоты, другой причиной могут быть анимации. Попробуйте добавить анимационный код в метод onStart(). – Apurva

ответ

0

В соответствии с аналогичными вопросами проблема может быть в Android Studio. Эта ошибка работает только в режиме отладки и не влияет на вашу версию APK. Попробуйте это, как временное решение:

Settings → Build, Execution, Deployment → Instant Run and uncheck Enable Instant Run 
0

Посмотреть эту ссылку для первой активности, отнимающей много времени отображается Click Here

Смежные вопросы