在完成onCreate()之前等待用户交互

时间:2015-09-18 20:33:14

标签: android asynchronous oncreate program-flow

在我的应用中,我将所有内容设置为 onCreate ,然后启动异步任务,设置加载我的所有资源等...在异步任务启动后,我添加了启动画面到我的布局。当所有内容都已加载时,启动画面将被解除,我的Open GL渲染器将显示在下方。

我正在尝试做的是添加一个对话框屏幕(基本上是另一个显示位图的 View 类)。并且,我不希望任何Splash内容发生,直到用户按下我的对话框屏幕内的屏幕。

这将是这样的(注意,这只是我真正的onCreate的摘录,但应该足以说明问题)

public void onCreate(Bundle savedInstanceState){

        SplashScreen splash = new SplashScreen (getApplication(), width, height);
        ConsentDialog consentDialog = new ConsentDialog(getApplication(), width, height);

        //Add the consent dialog
        layout.addView(consentDialog);

        setContentView(layout);

        super.onCreate(savedInstanceState);

        //Splashscreen
        backgroundResources = new MyAsync(newBundle);
        backgroundResources.execute(); 
        layout.addView(splash);
}

然而,当我运行上面的内容时,它会显示启动画面,加载所有内容,然后关闭启动画面,将对话框留在后面。

如何在setContentView之后暂停(或产生暂停效果的东西)onCreate方法,直到用户点击屏幕为止? (注意,我正在使用consentDialog对象中的onTouch(View v,MotionEvent事件)方法等待触摸事件。

基本上,异步不应该在用户点击屏幕之前启动。如果不能做到这一点,我能做些什么来达到能产生我想要的效果呢?

1 个答案:

答案 0 :(得分:1)

在onCreate上,app对用户实际上没有活动(可见或互动)。

我认为你所能做的只是在显示启动之前等待用户的互动(点击)。

活动是事件驱动的。您应该将onClickListener或onTouchListener设置(添加)到您的屏幕视图。在监听器的实现中,您可以编写显示splash的代码。只有在用户点击时才会调用此代码。