减少Android应用启动时间

时间:2016-06-23 13:31:30

标签: android performance oncreate

我正在开发一个使用共享偏好设置文件的应用,它还包含广告。当我第一次打开我的应用程序(从android studio运行)时,我的主要活动需要14-16秒才能加载。缓存后需要2秒钟才能加载。我意识到我在onCreate()方法中放了太多操作。然后我尝试使用onResume(),但它仍然需要相同的时间。我想知道如何缩短启动时间。我的应用使用共享偏好文件,它包含广告。我还注意到我的应用缓存为20MB。 代码如下

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    EditText nme_key = (EditText)findViewById(R.id.name_key);
    EditText cls_key = (EditText)findViewById(R.id.class_key);
    EditText num_key = (EditText)findViewById(R.id.number_key);
    SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.preference_file_key),MODE_PRIVATE);
    nme_key.setText(sharedPreferences.getString("name","name"));
    cls_key.setText(sharedPreferences.getString("class","class"));
    num_key.setText(sharedPreferences.getString("number","number"));
    MobileAds.initialize(getApplicationContext(), "");
    mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().addTestDevice("").build();
    mAdView.loadAd(adRequest);
}

我有3个问题

  1. 如何缩短应用的启动时间(主题?)

  2. 如何减少应用的缓存大小

  3. 如何改善应用效果

1 个答案:

答案 0 :(得分:0)

我发现广告是导致我的应用启动时间太长的原因。

所以,这就是我的解决方法:

//run in the background
AsyncTask.execute(() -> {
            MobileAds.initialize(this, initializationStatus -> {});
            //Banner Ad
            AdView adView = findViewById(R.id.ad_view);
            AdRequest adRequest = new AdRequest.Builder().build();

            //Interstitial Ad
            mInterstitialAd = new InterstitialAd(this);
            mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");


            //you have to load the Ads in the foreground
            this.runOnUiThread(() -> {
                adView.loadAd(adRequest);
                mInterstitialAd.loadAd(new AdRequest.Builder().build());

            });
        });

如何显示非页内广告:

button.setOnClickListener(view -> {

            //check first, if it is instantiated and loaded
            if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            }
        });

但是请注意,这将使您的应用在加载前不显示任何广告就可以启动。 我知道我已经很晚了,但是我希望这会对功能有所帮助。