Search code examples
javaandroidoncreate

Android : How to load an activity faster when calling it from another activity, even while loading several contents in the second activity


I'm new to java and android so I am asking these kind of questions here to understand how it should work.

I have 2 Activities in my app viz Welcome_Activity.java and Content_Activity.java

The First Activity work smoothly but the problem comes when the Content_Activity(Second Activity) is called from Welcome_Activity(First Activity)

In the onCreate of Second Activity, I think the contents which are too many cause the Activity to load too slow.

How to solve this issue?

Example :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_Puzzle_game);

    q1_tv = (TextView) findViewById(R.id.q1_tv);
    q2_tv = (TextView) findViewById(R.id.q2_tv);
    q3_tv = (TextView) findViewById(R.id.q3_tv);
    q4_tv = (TextView) findViewById(R.id.q4_tv);
    q5_tv = (TextView) findViewById(R.id.q5_tv);
    q6_tv = (TextView) findViewById(R.id.q6_tv);
    q7_tv = (TextView) findViewById(R.id.q7_tv);
    q8_tv = (TextView) findViewById(R.id.q8_tv);
    q9_tv = (TextView) findViewById(R.id.q9_tv);
    q10_tv = (TextView) findViewById(R.id.q10_tv);

    bt1 = (Button) findViewById(R.id.bt1);
    bt2 = (Button) findViewById(R.id.bt2);
    bt3 = (Button) findViewById(R.id.bt3);
    bt4 = (Button) findViewById(R.id.bt4);
    bt5 = (Button) findViewById(R.id.bt5);
    bt6 = (Button) findViewById(R.id.bt6);
    bt7 = (Button) findViewById(R.id.bt7);
    bt8 = (Button) findViewById(R.id.bt8);
    bt9 = (Button) findViewById(R.id.bt9);
    bt10 = (Button) findViewById(R.id.bt10);

    SP = getSharedPreferences("saved_data", MODE_PRIVATE);
    solved = SP.getInt("solved", 0);

    // LoadLevel & ResumeGame is just a method to get data from another class that have array Strings to fill the textviews and buttons 

    if (solved > 0) {
        ResumeGame(null);
    }
    else {
        LoadLevel(null);
    }
}

Solution

  • I assume you are fetching data in ResumeGame & LoadGame methods either from web services or from local app storage; if so try to do fetching thing in other than main thread (UI thread) and as soon as you get the data try to pass this data on UI thread. The best way to do it for you (beginner) use AsyncTask, usable callbacks in AsyncTask could be:

    • doInBackground: here write your code to get the data
    • onPostExecute: Here you can fill your UI views like button label, text of TextView

    I hope this will help you in order to improve performance.