Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reduce android app startup time

I am developing an app that uses a shared preferences file and it also contains ads. When I open my app for the first time (running from android studio) my main activity's taking 14-16 seconds to load. After caching it takes 2 seconds to load. I realised that I was putting too many operations in my onCreate() method.Then I tried using onResume(), but it is still taking the same time. I would like to know how I could reduce this startup time. My app uses a shared preference file and it contains ads.I also noticed that my app cache is 20MB. Code is as follows

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);
}

I have 3 questions

  1. How to reduce the startup time of my app ( Threads?)

  2. How to reduce the cache size of my app

  3. How can I improve my app performance

like image 710
VaM999 Avatar asked Mar 28 '26 02:03

VaM999


1 Answers

I found out that Ads are the reason that makes my application takes too long to start.

So, this how I fixed it:

//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());

            });
        });

How to show Interstitial Ad:

button.setOnClickListener(view -> {

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

But be aware that this will make your app start without showing any ads until they load up. I know I'm very late but I hope this will help people in the feature.

like image 184
Ziad H. Avatar answered Mar 29 '26 16:03

Ziad H.