2013-03-22 2 views
1

У меня есть приложение для игры, которое занимает очень много времени для загрузки. Раньше у меня не было отставания, когда я указывал свою игру, но теперь это так, и я подозреваю, что что-то висит. Возможно ли, что он висит из-за того, как я загружаю изображения? Вот что у меня есть:Приложение Hanging on start

В OnCreate() У меня есть:

v = new SView(this);      // Creates my new SurfaceView 
a = new Accelerator();     // Adds the accelerometer 
new loadPhotos().execute("");    // Initiates the AsyncTask posted below 
new handleStuff().execute("");   // starts the generation of the game map 
startTime = System.currentTimeMillis(); // Used to generate time lasted 
setContentView(v);      // Sets contentView to the SurfaceView 


public class loadPhotos extends AsyncTask<String, Integer, String> 
{ 
@Override 

protected String doInBackground(String... arg0) { 

    return null; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    Log.d(null, "!!!!!!!!!!!!!----------Starting Load-----------!!!!!!!!!1"); 
    player = BitmapFactory.decodeResource(getResources(), R.drawable.player); 
    playerOpaque = BitmapFactory.decodeResource(getResources(), R.drawable.player_opaque); 
    livesBM = BitmapFactory.decodeResource(getResources(), R.drawable.lives); 
    playerMissile = BitmapFactory.decodeResource(getResources(), R.drawable.player_missle); 
    missileButton = BitmapFactory.decodeResource(getResources(), R.drawable.missile_button); 
    playerBullet = BitmapFactory.decodeResource(getResources(), R.drawable.bullet); 
    enemyBullet = BitmapFactory.decodeResource(getResources(), R.drawable.enemy_bullet); 
    enemyMissile = BitmapFactory.decodeResource(getResources(), R.drawable.enemy_missle); 
    enemy = BitmapFactory.decodeResource(getResources(), R.drawable.enemy); 
    explosionBig = BitmapFactory.decodeResource(getResources(), R.drawable.explosion); 
    lastESpawn = System.currentTimeMillis(); 
    background = BitmapFactory.decodeResource(getResources(), R.drawable.background_clearsky); 
    cloudBM1 = BitmapFactory.decodeResource(getResources(), R.drawable.cloud1); 
    cloudBM2 = BitmapFactory.decodeResource(getResources(), R.drawable.cloud2); 
    Log.d(null, "!!!!!!!!!!!!!----------Ending Load-----------!!!!!!!!!1"); 
} 

}

Вот мой LogCat

03-22 10:03:50.546: D/(1220): !!!!!!!!!!!!!----------Starting Load-----------!!!!!!!!!1 
03-22 10:03:50.596: D/(1220): !!!!!!!!!!!!!----------Ending Load-----------!!!!!!!!!1 
03-22 10:03:50.616: I/Adreno200-EGLSUB(1220): <ConfigWindowMatch:2087>: Format RGBA_8888. 
03-22 10:03:50.646: W/SurfaceView(1220): CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=true left=false top=false 
03-22 10:03:50.656: D/(1220): !!!!!!!!!!!!!----------Starting Load-----------!!!!!!!!!1 
03-22 10:03:50.706: D/dalvikvm(1220): GC_CONCURRENT freed 2361K, 14% free 22198K/25543K, paused 11ms+2ms, total 28ms 
03-22 10:03:50.726: D/(1220): !!!!!!!!!!!!!----------Ending Load-----------!!!!!!!!!1 
03-22 10:03:50.746: I/Adreno200-EGLSUB(1220): <ConfigWindowMatch:2087>: Format RGBA_8888. 
03-22 10:04:18.096: D/dalvikvm(1220): GC_FOR_ALLOC freed 4756K, 28% free 20236K/27975K, paused 16ms, total 18ms 
03-22 10:04:18.096: I/dalvikvm-heap(1220): Grow heap (frag case) to 32.131MB for 3686416-byte allocation 
+0

Не могли бы вы разместить свой логарифм? Я подозреваю, что @codeMagic прав, и вам нужно получить свои ресурсы в методе 'onPreExecute', а затем работать с ними в' doInBackground' –

+0

используйте эту ссылку, чтобы эффективно использовать AsyncTask http://developer.android.com/ reference/android/os/AsyncTask.html – andrewww

+0

Я добавил Logcat, а также обновил свой класс AsyncTask – Josh

ответ

0

Вы пытаетесь получить доступ к UI ресурсов через в doInBackground который вы не можете сделать. Это должно быть в onPostExecute() или другом методе Async, но я даже не уверен, что вы хотите/нуждаетесь в этом AsyncTask. Вы можете просто установить ваш images используя ImageView methods и загрузить их в методе ваших Activity

0

попытка загрузки изображений, как показано ниже В ImageView iv.setImageResource (R.drawable.imagename);

Это намного быстрее, чем загрузка через decoderesource. Каждая из ваших загрузок изображений имеет такой метод.