Android Game Development. Async Task. Loading Bitmap Images Sounds

Posted by user2534694 on Game Development See other posts from Game Development or by user2534694
Published on 2013-06-29T14:17:18Z Indexed on 2013/06/29 16:30 UTC
Read the original article Hit count: 224

Filed under:
|

Im working on this game for android.

And wanted to know if my thread architecture was right or wrong.

Basically, what is happening is, i am loading All the bitmaps,sounds etc in the initializevariables() method.

But sometimes the game crashes and sometimes it doesnt. So i decided to use async task. But that doesnt seem to work either (i too loads at times and crashes at times)

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

    setFullScreen();
    initializeVariables();

    new initVariables().execute();

//  setContentView(ourV);
}

private void setFullScreen() 
{
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
}

private void initializeVariables() 
{
    ourV=new OurView(this);
    stats = getSharedPreferences(filename, 0);

    ballPic  = BitmapFactory.decodeResource(getResources(), R.drawable.ball5);
    platform = BitmapFactory.decodeResource(getResources(), R.drawable.platform3);
    gameB    = BitmapFactory.decodeResource(getResources(), R.drawable.game_back2);
    waves    = BitmapFactory.decodeResource(getResources(), R.drawable.waves);
    play     = BitmapFactory.decodeResource(getResources(), R.drawable.play_icon);
    pause    = BitmapFactory.decodeResource(getResources(), R.drawable.pause_icon);
    platform2 = BitmapFactory.decodeResource(getResources(), R.drawable.platform4);

    countdown = BitmapFactory.decodeResource(getResources(), R.drawable.countdown);

    bubbles      = BitmapFactory.decodeResource(getResources(), R.drawable.waves_bubbles);


    backgroundMusic = MediaPlayer.create(this, R.raw.music);


    jump  =  MediaPlayer.create(this, R.raw.jump);
    click =  MediaPlayer.create(this, R.raw.jump_crack);

    sm  = (SensorManager) getSystemService(SENSOR_SERVICE);
    acc = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    sm.registerListener(this, acc, SensorManager.SENSOR_DELAY_GAME);
    ourV.setOnTouchListener(this);

    dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    dialog.setContentView(R.layout.pausescreen);
    dialog.hide();
    dialog.setOnDismissListener(this);

    resume = (Button) dialog.findViewById(R.id.bContinue);
    menu   = (Button) dialog.findViewById(R.id.bMainMenu);
    newTry = (Button) dialog.findViewById(R.id.bNewTry);

    tv_time = (TextView) dialog.findViewById(R.id.tv_time);
    tv_day  = (TextView) dialog.findViewById(R.id.tv_day);
    tv_date  = (TextView) dialog.findViewById(R.id.tv_date);

    resume.setOnClickListener(this);
    menu.setOnClickListener(this);
    newTry.setOnClickListener(this);

}

    @Override
protected void onResume() 
{
    //if its running the first time it goes in the brackets
    if(firstStart)
    {
        ourV.onResume();
        firstStart=false;
    }
}

Now what onResume in ourV does is , its responsible for starting the thread

            //this is ourV.onResume  
        public void onResume()
        {
            t=new Thread(this);
            isRunning=true;
            t.start();
        }

Now what I want is to initialise all bitmaps sounds etc in the async background method

    public class initVariables extends AsyncTask<Void, Integer, Void>
            {

                ProgressDialog pd;

                @Override
                protected void onPreExecute()
                {
                    pd = new ProgressDialog(GameActivity.this);

                    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    pd.setMax(100);
                    pd.show();
                }

                @Override
                protected Void doInBackground(Void... arg0) 
                {

                    synchronized (this) 
                    {



                    for(int i=0;i<20;i++)
                    {
                        publishProgress(5);

                        try {
                            Thread.sleep(89);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    }

                    return null;
                }

                @Override
                protected void onProgressUpdate(Integer... values)
                {
                    pd.incrementProgressBy(values[0]);
                }

                @Override
                protected void onPostExecute(Void result)
                {
                    pd.dismiss();

                    setContentView(ourV);
                }

            }

Now since I am new to this. You could tellme maybe if async is not required for such stuff and there is another way of doing it normally.

© Game Development or respective owner

Related posts about android

Related posts about loading