title: Level loading is extremely slow on Android device but works fine on iOS (Unity3D)
body: <p>I ran into the following problem when building my app an an android device (running Android SDK 23 and JDK(Java Dev.Kit) 1.8.0_144 on Unity 5.5.2f1)
  I used these SDK, JDK and Unity version as they fix some other bug issues I had.</p>
  
  <p>Now my problem:
  Scene 1 is my Home menu. I want to proceed from there over a short other scene (2) into my main game (scene 3). When in scene 3 the user can solve puzzles and get points. These points are saved (seems to work fine to this point)...
  BUT when I hit the backbutton to go back to the main menu the LOADING OF THIS SCENE takes like over 20sec when no points to save and like over 30sec to endless when the user has gained some points.</p>
  
  <p>Weird thing: On iOS this takes like 3-4sec and works perfect. On Android the issue is persisting.</p>
  
  <p>I am aware that I often use Resources.Load() in the main menu to load some graphics, BUT even when excluding all Resources.Load() functions this issue is there. Also other scenes like 0,2 take forever to load. So I think it's a problem with Scenemanager.LoadScene("scene name"). </p>
  
  <p>I tried Async Loading as well (no progress) and I also compressed everything (textures, sprites) and even put a solid color instead of an skybox in the background. </p>
  
  <p>Here is my code to go back from Scene3 to Scene1:</p>
  
  <pre><code>void Awake()
  {
      SD = GameObject.FindGameObjectWithTag ("GM").GetComponent&lt;SaveData&gt; ();
      MS = GameObject.FindGameObjectWithTag ("MainCamera").GetComponent&lt;MailerScript&gt; ();
  }
  // Use this for initialization
  void Start () 
  {
      BBH.BackToMapButtonsPanel.SetActive (false);
      BackPanelIsActive = false;
      AnimationHandler.STATICbeenInVillageScene = true;
  }
  
  public void ShowBackToMapButtons()
  {
      if (!BackPanelIsActive) 
      {
          BBH.BackToMapButtonsPanel.SetActive (true);
          BackPanelIsActive = true;
      } 
      else 
      {
          BBH.BackToMapButtonsPanel.SetActive (false);
          BackPanelIsActive = false;
      }
  }
  
  public void BackToHOME()
  {
      Debug.Log ("Back To Home Executed");
      STATICgoToHome = true;
      BLACK3.SetActive(true);
      WantBackToHome = true;
      if (LocalizationCheck.LanguageGerman) {
          BLACK3.GetComponentInChildren&lt;Text&gt; ().text = "Möchtest du zurück zum Hauptmenü?";
      } else {
          BLACK3.GetComponentInChildren&lt;Text&gt; ().text = "Return to main menue?";
      }
  
  }
  public void GoBackToHomescreen()
  {
      if (!YesChosen &amp;&amp; PostenPunkte.postenRunning == false) 
      {
          CheckNewstarte.newGameStart = false;
          if (LocalizationCheck.LanguageGerman) {
              BLACK3.GetComponentInChildren&lt;Text&gt; ().text = "Einen Moment.\nDeine Punkte werden gespeichert...";
          } else {
              BLACK3.GetComponentInChildren&lt;Text&gt; ().text = "One Moment.\nYour points are beeing saved...";
          }
          StartCoroutine (WaitAndGoBackToHomescreen ());
          YesChosen = true;
          WantBackToHome = false;
          STATICgoToHome = false;
      }
  }
  
  IEnumerator WaitAndGoBackToHomescreen()
  {
      yield return new WaitForSeconds(2);
      SceneManager.LoadScene(1);
  }
  public void BackToVillage ()
  {
      if (Linkposten.parentalgateOpen == false) 
      {
          Debug.Log ("BackToVillageExecuted");
          if (MailerScript.camOn == false) 
          { //Debug.Log ("Back To Home works");
              BackToHOME ();
          } else if (MailerScript.camOn) 
          { //Debug.Log ("Cam Stop works");
              MS.StopCam ();
          } else {
              //Debug.Log ("Parentalgate Stop works");
              ParentalGate.SetActive (false);
              Linkposten.parentalgateOpen = false;
          }
  
      }
  }
  </code></pre>
  
  <p>This is the saving script with very many values (I just show it to make clear that all these are running smoothly on iOS):</p>
  
  <pre><code>public void SaveCharacterDATA()
  {
      //BINARY FORMATTER AND FILE CREATE
      BinaryFormatter bf2 = new BinaryFormatter ();
      FileStream file2 = File.Create (Application.persistentDataPath + "/CharakterInfo.dat"); // Debug.Log(Application.persistentDataPath); --&gt; shows path
  
      //CONTAINER FOR DATA
      CharakterData chara = new CharakterData ();
      chara.PD_was_safed = 1; //to check if there is already sth. saved
      chara.PD_charakterItemKopf = ShopScript.SaveReference_Kopf;
      chara.PD_charakterItemAuge = ShopScript.SaveReference_Auge;
      chara.PD_charakterItemTorso = ShopScript.SaveReference_Torso;
      chara.PD_charBodyPart = ShopScript.activeBodyPartIndex;
      chara.PD_charMainInt = ShopScript.mainInt;
      chara.PD_charakterMK1 = ShopScript.boughtItem_MK [0];
      chara.PD_charakterMK2 = ShopScript.boughtItem_MK [1];
      chara.PD_charakterMK3 = ShopScript.boughtItem_MK [2];
      chara.PD_charakterMK4 = ShopScript.boughtItem_MK [3];
      chara.PD_charakterMK5 = ShopScript.boughtItem_MK [4];
      chara.PD_charakterMK6 = ShopScript.boughtItem_MK [5];
      chara.PD_charakterMK7 = ShopScript.boughtItem_MK [6];
      chara.PD_charakterMK8 = ShopScript.boughtItem_MK [7];
      chara.PD_charakterMA1 = ShopScript.boughtItem_MA [0];
      chara.PD_charakterMA2 = ShopScript.boughtItem_MA [1];
      chara.PD_charakterMA3 = ShopScript.boughtItem_MA [2];
      chara.PD_charakterMA4 = ShopScript.boughtItem_MA [3];
      chara.PD_charakterMA5 = ShopScript.boughtItem_MA [4];
      chara.PD_charakterMA6 = ShopScript.boughtItem_MA [5];
      chara.PD_charakterMA7 = ShopScript.boughtItem_MA [6];
      chara.PD_charakterMA8 = ShopScript.boughtItem_MA [7];
      chara.PD_charakterMT1 = ShopScript.boughtItem_MT [0];
      chara.PD_charakterMT2 = ShopScript.boughtItem_MT [1];
      chara.PD_charakterMT3 = ShopScript.boughtItem_MT [2];
      chara.PD_charakterMT4 = ShopScript.boughtItem_MT [3];
      chara.PD_charakterMT5 = ShopScript.boughtItem_MT [4];
      chara.PD_charakterMT6 = ShopScript.boughtItem_MT [5];
      chara.PD_charakterMT7 = ShopScript.boughtItem_MT [6];
      chara.PD_charakterMT8 = ShopScript.boughtItem_MT [7];
      chara.PD_charakterFK1 = ShopScript.boughtItem_FK [0];
      chara.PD_charakterFK2 = ShopScript.boughtItem_FK [1];
      chara.PD_charakterFK3 = ShopScript.boughtItem_FK [2];
      chara.PD_charakterFK4 = ShopScript.boughtItem_FK [3];
      chara.PD_charakterFK5 = ShopScript.boughtItem_FK [4];
      chara.PD_charakterFK6 = ShopScript.boughtItem_FK [5];
      chara.PD_charakterFK7 = ShopScript.boughtItem_FK [6];
      chara.PD_charakterFK8 = ShopScript.boughtItem_FK [7];
      chara.PD_charakterFA1 = ShopScript.boughtItem_FA [0];
      chara.PD_charakterFA2 = ShopScript.boughtItem_FA [1];
      chara.PD_charakterFA3 = ShopScript.boughtItem_FA [2];
      chara.PD_charakterFA4 = ShopScript.boughtItem_FA [3];
      chara.PD_charakterFA5 = ShopScript.boughtItem_FA [4];
      chara.PD_charakterFA6 = ShopScript.boughtItem_FA [5];
      chara.PD_charakterFA7 = ShopScript.boughtItem_FA [6];
      chara.PD_charakterFA8 = ShopScript.boughtItem_FA [7];
      chara.PD_charakterFT1 = ShopScript.boughtItem_FT [0];
      chara.PD_charakterFT2 = ShopScript.boughtItem_FT [1];
      chara.PD_charakterFT3 = ShopScript.boughtItem_FT [2];
      chara.PD_charakterFT4 = ShopScript.boughtItem_FT [3];
      chara.PD_charakterFT5 = ShopScript.boughtItem_FT [4];
      chara.PD_charakterFT6 = ShopScript.boughtItem_FT [5];
      chara.PD_charakterFT7 = ShopScript.boughtItem_FT [6];
      chara.PD_charakterFT8 = ShopScript.boughtItem_FT [7];
  
      //CONTAINER INSIDE FILE AND CLOSE
      bf2.Serialize (file2, chara);
      file2.Close ();
  
      Debug.Log ("Charakter Data Safed");
  }
  public void LoadCharacterDATA()
  {
      if (File.Exists (Application.persistentDataPath + "/CharakterInfo.dat") )
      {
          BinaryFormatter bf = new BinaryFormatter ();
          FileStream file2 = File.Open (Application.persistentDataPath + "/CharakterInfo.dat", FileMode.Open);
          CharakterData chara = (CharakterData)bf.Deserialize (file2);
          file2.Close ();
  
          wasSafedIndex = chara.PD_was_safed;
          SdCharakterItemString_Kopf = chara.PD_charakterItemKopf;
          SdCharakterItemString_Auge = chara.PD_charakterItemAuge;
          SdCharakterItemString_Torso = chara.PD_charakterItemTorso;
          SdCharakterActiveBodyPart = chara.PD_charBodyPart;
          SdCharakterMainInt = chara.PD_charMainInt;
          SdCharakterMK1 = chara.PD_charakterMK1;
          SdCharakterMK2 = chara.PD_charakterMK2;
          SdCharakterMK3 = chara.PD_charakterMK3;
          SdCharakterMK4 = chara.PD_charakterMK4;
          SdCharakterMK5 = chara.PD_charakterMK5;
          SdCharakterMK6 = chara.PD_charakterMK6;
          SdCharakterMK7 = chara.PD_charakterMK7;
          SdCharakterMK8 = chara.PD_charakterMK8;
          SdCharakterMA1 = chara.PD_charakterMA1;
          SdCharakterMA2 = chara.PD_charakterMA2;
          SdCharakterMA3 = chara.PD_charakterMA3;
          SdCharakterMA4 = chara.PD_charakterMA4;
          SdCharakterMA5 = chara.PD_charakterMA5;
          SdCharakterMA6 = chara.PD_charakterMA6;
          SdCharakterMA7 = chara.PD_charakterMA7;
          SdCharakterMA8 = chara.PD_charakterMA8;
          SdCharakterMT1 = chara.PD_charakterMT1;
          SdCharakterMT2 = chara.PD_charakterMT2;
          SdCharakterMT3 = chara.PD_charakterMT3;
          SdCharakterMT4 = chara.PD_charakterMT4;
          SdCharakterMT5 = chara.PD_charakterMT5;
          SdCharakterMT6 = chara.PD_charakterMT6;
          SdCharakterMT7 = chara.PD_charakterMT7;
          SdCharakterMT8 = chara.PD_charakterMT8;
          SdCharakterFK1 = chara.PD_charakterFK1;
          SdCharakterFK2 = chara.PD_charakterFK2;
          SdCharakterFK3 = chara.PD_charakterFK3;
          SdCharakterFK4 = chara.PD_charakterFK4;
          SdCharakterFK5 = chara.PD_charakterFK5;
          SdCharakterFK6 = chara.PD_charakterFK6;
          SdCharakterFK7 = chara.PD_charakterFK7;
          SdCharakterFK8 = chara.PD_charakterFK8;
          SdCharakterFA1 = chara.PD_charakterFA1;
          SdCharakterFA2 = chara.PD_charakterFA2;
          SdCharakterFA3 = chara.PD_charakterFA3;
          SdCharakterFA4 = chara.PD_charakterFA4;
          SdCharakterFA5 = chara.PD_charakterFA5;
          SdCharakterFA6 = chara.PD_charakterFA6;
          SdCharakterFA7 = chara.PD_charakterFA7;
          SdCharakterFA8 = chara.PD_charakterFA8;
          SdCharakterFT1 = chara.PD_charakterFT1;
          SdCharakterFT2 = chara.PD_charakterFT2;
          SdCharakterFT3 = chara.PD_charakterFT3;
          SdCharakterFT4 = chara.PD_charakterFT4;
          SdCharakterFT5 = chara.PD_charakterFT5;
          SdCharakterFT6 = chara.PD_charakterFT6;
          SdCharakterFT7 = chara.PD_charakterFT7;
          SdCharakterFT8 = chara.PD_charakterFT8;
          Debug.Log ("charakter Data Loaded");
      }
  }
  </code></pre>
  
  <p>And the code from scene 1 that executes perfect when coming from scene 0 to 1.</p>
  
  <pre><code>void Awake ()
  {
          SD = GameObject.FindGameObjectWithTag ("GM").GetComponent&lt;SaveData&gt; ();
  
          boughtItem_MK = new string[8];
          boughtItem_MA = new string[8];
          boughtItem_MT = new string[8];
          boughtItem_FK = new string[8];
          boughtItem_FA = new string[8];
          boughtItem_FT = new string[8];
          //male items
          boughtItem_MK [0] = SaveData.SdCharakterMK1;
          boughtItem_MK [1] = SaveData.SdCharakterMK2;
          boughtItem_MK [2] = SaveData.SdCharakterMK3;
          boughtItem_MK [3] = SaveData.SdCharakterMK4;
          boughtItem_MK [4] = SaveData.SdCharakterMK5;
          boughtItem_MK [5] = SaveData.SdCharakterMK6;
          boughtItem_MK [6] = SaveData.SdCharakterMK7;
          boughtItem_MK [7] = SaveData.SdCharakterMK8;
          boughtItem_MA [0] = SaveData.SdCharakterMA1;
          boughtItem_MA [1] = SaveData.SdCharakterMA2;
          boughtItem_MA [2] = SaveData.SdCharakterMA3;
          boughtItem_MA [3] = SaveData.SdCharakterMA4;
          boughtItem_MA [4] = SaveData.SdCharakterMA5;
          boughtItem_MA [5] = SaveData.SdCharakterMA6;
          boughtItem_MA [6] = SaveData.SdCharakterMA7;
          boughtItem_MA [7] = SaveData.SdCharakterMA8;
          boughtItem_MT [0] = SaveData.SdCharakterMT1;
          boughtItem_MT [1] = SaveData.SdCharakterMT2;
          boughtItem_MT [2] = SaveData.SdCharakterMT3;
          boughtItem_MT [3] = SaveData.SdCharakterMT4;
          boughtItem_MT [4] = SaveData.SdCharakterMT5;
          boughtItem_MT [5] = SaveData.SdCharakterMT6;
          boughtItem_MT [6] = SaveData.SdCharakterMT7;
          boughtItem_MT [7] = SaveData.SdCharakterMT8;
          //female items
          boughtItem_FK [0] = SaveData.SdCharakterFK1;
          boughtItem_FK [1] = SaveData.SdCharakterFK2;
          boughtItem_FK [2] = SaveData.SdCharakterFK3;
          boughtItem_FK [3] = SaveData.SdCharakterFK4;
          boughtItem_FK [4] = SaveData.SdCharakterFK5;
          boughtItem_FK [5] = SaveData.SdCharakterFK6;
          boughtItem_FK [6] = SaveData.SdCharakterFK7;
          boughtItem_FK [7] = SaveData.SdCharakterFK8;
          boughtItem_FA [0] = SaveData.SdCharakterFA1;
          boughtItem_FA [1] = SaveData.SdCharakterFA2;
          boughtItem_FA [2] = SaveData.SdCharakterFA3;
          boughtItem_FA [3] = SaveData.SdCharakterFA4;
          boughtItem_FA [4] = SaveData.SdCharakterFA5;
          boughtItem_FA [5] = SaveData.SdCharakterFA6;
          boughtItem_FA [6] = SaveData.SdCharakterFA7;
          boughtItem_FA [7] = SaveData.SdCharakterFA8;
          boughtItem_FT [0] = SaveData.SdCharakterFT1;
          boughtItem_FT [1] = SaveData.SdCharakterFT2;
          boughtItem_FT [2] = SaveData.SdCharakterFT3;
          boughtItem_FT [3] = SaveData.SdCharakterFT4;
          boughtItem_FT [4] = SaveData.SdCharakterFT5;
          boughtItem_FT [5] = SaveData.SdCharakterFT6;
          boughtItem_FT [6] = SaveData.SdCharakterFT7;
          boughtItem_FT [7] = SaveData.SdCharakterFT8;
  
  }
  
  // Use this for initialization
  void Start () 
  {
  
      //Charakter load and assign sprites
      SD.LoadCharacterDATA ();
      if (SaveData.CharPicIndex == 1) 
      {
          charakter.sprite = CharMale;
          CharIndexCheck = 1;
      }
      if (SaveData.CharPicIndex == 2) 
      {
          charakter.sprite = CharFemale;
          CharIndexCheck = 2;
      }
      if (SaveData.wasSafedIndex == 1) 
      {
          currINT = SaveData.SdCharakterMainInt;
      }
      else if (SaveData.wasSafedIndex == 0) 
      {
          currINT = 2;
      }
  
      mainInt = currINT;
      leftInt = mainInt - 1;
      rightInt = mainInt + 1;
  
  
      LoadSafedItemSetup ();  
      ShowCurrItemSetup (); 
  
      if (!AnimationHandler.STATICfirstTimeStartApp) 
      {
          SetUpNameAndMoney ();
      }
      if (PostenPunkte.earnedPoints) 
      {
          SetUpNameAndMoney ();
          //Debug.Log ("earnedPosten Setup executed");
      }
  
  }
  
  IEnumerator WaitforNameAndMoneyToLoad()
  {
      yield return new WaitForSeconds (1);
      MoneyPoints = SaveData.Savedmoney;
      currMoney = MoneyPoints;
      MoneyText.text = currMoney.ToString ();
      UserNameText.text = CheckNewstarte.PlayerName;
      UserProfilMoney.text = currMoney.ToString ();
      //Debug.Log ("Moneypoints = " + MoneyPoints + " and UserprofilMoney = " + UserProfilMoney.text);
  }
  public void SetUpNameAndMoney()
  {
      //Only in iOS/Android
  
      //Show saved money
      SD.LoadDATA ();
      StartCoroutine (WaitforNameAndMoneyToLoad ());
  
  }
  </code></pre>
  
  <p>Could it be sth. with the Coroutines? As I mentioned it works (sometimes), but it takes way to long.</p>
  
  <p>I hope someone can help me out as is truggle since a long time on this.
  Thank's in advance!</p>