我正在为 android 开发某种游戏,为了实现这个目的,我使用了一个保存在 Activity 中的 SurfaceView。
有时需要暂停,因此 Surfaceview 实际上在画布中绘制了一些东西,然后它等待并根据存储在 Vector 中的一些整数连续绘制一些其他东西。
起初我试图通过使用 Thread.sleep() 和 Systemclock.sleep() 来获得这种暂停,这似乎毫无用处,因为线程总是被阻塞,所以即使正确调用绘图方法也不会显示任何更改。
在这里,我看到使用 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;
}
这是日志猫:
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 E/pausar: 进入 pausar
08-18 22:21:54.060 805-904/com.example.simondeluxe E/Repsec: despierta = false
08-18 22:21:54.070 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec
08-18 22:21:54.070 805-904/com.example.simondeluxe E/pausar: 进入 pausar
08-18 22:21:54.070 805-904/com.example.simondeluxe E/Repsec: despierta = false
08-18 22:21:54.080 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec
08-18 22:21:54.080 805-904/com.example.simondeluxe E/pausar:进入pausar
08-18 22:21:54.080 805-904/com.example.simondeluxe E/Repsec: despierta = false
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.example.simondeluxe E/pausar: 进入 pausar
08-18 22:21:54.090 805-904/com.example.simondeluxe E/Repsec: despierta = false