私のアプリでは、非常に簡単な最初のアクティビティがあります。これは「スプラッシュ」アクティビティです。それは画像を表示し、小さなアニメーションの後に私のアプリのメインメニューアクティビティを起動します。最初のアクティビティは表示に多くの時間がかかります
問題は、この最初のスプラッシュアクティビティが、アプリがメモリにない場合、表示に膨大な時間がかかることです。私は、メモリからアプリを完全に破棄し、最近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();
}
}
あなたのイメージがどのように大きい 表示されることに多くの時間を取って最初の活動のために、このリンクを参照してください:この一時的なソリューションをお試しください ? – Stefan
非常に小さく、100x400のようなもの – NullPointerException
多分DisplayMetricsコードが幅と高さを計算するのに時間がかかるかもしれませんが、別の理由はアニメーションかもしれません。 onStart()メソッドにアニメーションコードを入れてみてください。 – Apurva