2016-08-16 4 views
1

私のアプリでは、非常に簡単な最初のアクティビティがあります。これは「スプラッシュ」アクティビティです。それは画像を表示し、小さなアニメーションの後に私のアプリのメインメニューアクティビティを起動します。最初のアクティビティは表示に多くの時間がかかります

問題は、この最初のスプラッシュアクティビティが、アプリがメモリにない場合、表示に膨大な時間がかかることです。私は、メモリからアプリを完全に破棄し、最近SOのアプリリストに載っていなくても、それを最初から起動すればいいのです。

アクティビティの内容を表示するには3〜4秒かかります。この3〜4秒で、システムのデフォルトの黒い背景のスタイルで暗い画面(100%黒ではない)を見ることができ、最初のアプリケーションの読み込みに費やされた時間がアクティビティのColor.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スタジオにある可能性があります。このバグはデバッグモードでのみ発生し、リリースAPKには影響しません。

Settings → Build, Execution, Deployment → Instant Run and uncheck Enable Instant Run 
関連する問題