2012-06-25 50 views
1

我的游戏需要很长时间从后台加载。在加载期间,屏幕是黑色的(约5-7秒,所以用户可能会认为它崩溃)。如何显示吐司没有完成加载上下文

我决定在进入前景时显示敬酒。

protected void onResume() { 

     System.out.println("onResume method called"); 
     Context context = getBaseContext(); 
//  Context context = getApplicationContext(); 
     CharSequence text = "i appreciate your patience"; 

     Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 

     toast.show(); 


     super.onResume(); 
     wl.acquire(); 
     if (accelerometerEnabled) { 
      accelerometer.enable(); 
     } 
    } 

但敬酒显示出来后,才完成恢复(这使得它没用) 我试过getApplicationContext,getBaseContext以及活动本身。 所以有可能在没有我的应用程序上下文的情况下直接在窗口上添加烤面包? (也许在系统级上下文)

回答

2

我认为,当它来自背景

尝试将所有非UI线程依赖的逻辑组合成的AsyncTask回报,这是关系到UI线程上你的游戏加载。

这应该允许您的祝词消息在加载游戏时可见。

+0

我可以把敬酒asynctask(以及如何?),而不是?我不认为有可能把我的游戏逻辑放在那里。当进入前景时,我基本上只是恢复OpenGL视图。 – OMGPOP

+0

你应该从UI线程调用你的面包,所以它不应该进入异步任务。 至于重新启动OpenGL视图,您应该有一个渲染状态,等待您的游戏数据异步加载。换句话说,当游戏重新开始时,会出现一个真正轻的“加载”屏幕,并在另一个线程中启动所有预处理。预处理完成后,恢复渲染。 你得到滞后的原因是因为当你离开后台时你的表面被重新创建,并且你正试图在UI线程上重建你的逻辑。 – WindyB

1

这是启动屏幕可能有用的地方。只需在xml中放置一个覆盖所有UI的启动画面,然后以asynctask开始加载过程。在asynctask的onPostExecute上,将飞溅布局的可见性设置为Gone。

不要忘记处理方向更改。