Android onCreate暂停,然后继续,直到加载类

时间:2014-01-18 06:49:03

标签: android in-app-purchase

所以我没有运气试图找到问题的解决方案。 这是它正在发生的事情,我希望也许有人可以帮助我:

我有一个名为purchaseItems的类,它加载IabHelper并加载用户购买的应用内商品。此类处理与应用内购买有关的所有内容。

当某个活动启动时,我在活动的onCreate()方法中初始化了类purchaseItems。但是,buyItems类似乎需要2-3秒才能完成加载或获取所有应用内购买,以确定用户支付的费用。

我希望在活动中的onCreate()方法中初始化purchaseItems类并等到它完成后再继续加载活动中的其他所有内容。我想在开始加载purchaseItems类时弹出一个进度对话框,一旦完成purchaseItems类的加载就离开。

同样,purchaseItems只是一个不扩展到任何东西的类。它只是初始化IaHelper以管理应用内购买等。

我没有运气,所以请有人帮帮我吗? 谢谢 d

2 个答案:

答案 0 :(得分:0)

考虑使用AsyncTask。这将允许您在后台进行加载,然后在完成后通知UI线程。在onCreate()中,您将打开进度对话框,然后运行循环,等待后台线程完成。看起来像这样:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    // do various things
    LoadStuffTask t = (LoadStuffTask) new LoadStuffTask().execute(); // launch the background task
    // pop up your dialog box
    while(t.getStatus() != AsyncTask.Status.FINISHED)
    {
       // wait on background thread
    }
    // task finishes, close your dialog
}

您的AsyncTask子类看起来像这样(通用实现 - 如果需要,您可以使用不同的返回类型):

protected class LoadStuffTask extends AsyncTask<Void, Void, Void>
{
    @Override
    protected Void doInBackground(Void ... params) // your background thread calls this method
    {
        // do your loading
        return null;
    }

    @Override
    protected void onPostExecute (Void v) // this method is called when doInBackground returns - once it finishes, the AsyncTask will have its status set to FINISHED 
    {
        // up to you if you want to do anything here
    }
};

要记住的一件重要事情是,您永远不应该尝试从doInBackground()访问UI,因为它不在UI线程上运行。如果您希望获得幻想并显示已加载的购买(如果已知),则可以使用publishProgress() AsyncTask方法,该方法会触发对onProgressUpdated()的调用UI线程,可以访问用户界面(例如更新进度条等)。

另一件需要注意的事情是,如果任务永远不会完成,可能会挂起你的主线程,所以你应该防范(可能是超时)。

找到AsyncTask课程的文档here

答案 1 :(得分:0)

不幸的是,我没有找到我认为它是上述问题的正确解决方案。我最终做的是初始化IabHelper对象,然后在执行更多代码之前添加2-3秒的延迟。这允许IabHelper被初始化并且有2-3秒的时间来完成它在使用之前必须做的任何事情。