Я разрабатываю какую-то игру для android, чтобы выполнить эту задачу. Я использую SurfaceView, который удерживается внутри Activity.Проблемы с Asynctask в android
Иногда бывает, когда требуется пауза, поэтому Surfaceview на самом деле рисует что-то на холсте, а затем ждет и рисует какую-то другую вещь в соответствии с целыми числами, которые хранятся внутри Vector.
Сначала я попытался получить эту паузу, используя Thread.sleep() и Systemclock.sleep(), и кажется, что это совершенно бесполезно, потому что поток всегда блокируется, поэтому даже если метод рисования правильно вызван были отображены изменения.
Here Я видел, что использование Asynctask, выполняющего спящее задание, а затем повышение флага должно быть хорошей идеей, чтобы все было сделано.
Так что я сделал это, но мне кажется, что onPostExecute никогда не называют, так что мой флаг никогда не поднялся ...
Любые идеи о том, как действовать дальше?
Это мое первое приложение для Android, поэтому, пожалуйста, будьте добрыми и такими же могущественными, как вы можете, с вашими ответами.
Большое спасибо.
Вот метод паузы:
public void pausar(){
Log.e("pausar", "entro a pausar");
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Log.e("pausar", "Empiezo a dormir");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e("pausar", "Acaba el sleep");
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
despierta = true;
Log.e("pausar", "¡¡¡¡¡¡¡¡¡¡¡¡¡¡DESPIERTO!!!!!!!!!!!");
}
};
if(!llamaPausa){
task.execute();
llamaPausa = true;
}
}
И это один метод последовательности игрок, где требуется пауза:
public void reproducirSecuencia(final Canvas canvas){
reproduciendo = true;
//TODO: HACER QUE ESTO FUNCIONE!!
Log.e("reproducirSecuencia", "Entro a reproducir");
int i = 0;
while(i < secuencia.size()){
Object o = secuencia.elementAt(i);
int num = 0;
if (o instanceof Integer) {num = (Integer) o;}
reproducirSonido(num);
repId = num;
onDraw(canvas);
//Log.e("reproducirSecuencia", "repId = " + repId);
//Log.e("reproducirSecuencia", "Invoco a pintarPiezas");
i++;
if(!despierta){
pausar();
Log.e("Repsec", "despierta = " + despierta);
}
llamaPausa = true;
despierta = false;**
//SystemClock.sleep(1000);
//try {Thread.sleep(1000);}
//catch (InterruptedException e) {e.printStackTrace();}
}
reproduciendo = false;
}
Вот LogCat:
08 -18 22: 21: 54.050 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec
08-18 22: 21: 54,060 805-904/com.example.simondeluxe Е/pausar: Entro pausar
08-18 22: 21: 54,060 805-904/com.example.simondeluxe Е/repsec: Despierta = ложная
08-18 22: 21: 54,070 805-904/com.example.simondeluxe Е/OnDraw: Entro OnDraw Цена от repsec
08-18 22: 21: 54,070 805 -904/com.example.simondeluxe E/pausar: entro a pausar
08-18 22: 21: 54.070 805-904/com.example.simondeluxe E/Repsec: d espierta = ложная
08-18 22: 21: 54,080 805-904/com.example.simondeluxe Е/OnDraw: Entro OnDraw Цена от repsec
08-18 22: 21: 54,080 805-904/ком .example.simondeluxe Е/pausar: Entro pausar
08-18 22: 21: 54.080 805-904/com.example.simondeluxe E/Repsec: Despierta = ложная
08-18 22:21: 54.090 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec
08-18 22: 21: 54.090 805-904/com.exam PLE.simondeluxe E/pausar: Entro pausar
08-18 22: 21: 54.090 805-904/com.example.simondeluxe E/Repsec: Despierta = ложь
Сообщение logcat please – Matt
Вот оно! Я уже добавил кусок. – Luis
Отправьте код, в котором вы активируете вызов своей задачи. –