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.