在Activity显示后如何运行我的代码?

时间:2012-04-02 08:44:03

标签: android android-activity visible loaded

我有一个带有3个微调器的Activity。这些微调器通过一种大约需要1分钟完成的方法从Web服务获取数据。

我想首先加载Activity,然后在它可见后,调用该Web服务方法并加载数据。我分别测试了以下代码,但没有一个解决了我的问题。在这些示例中,应用程序进入黑屏,当Web服务操作完成时,它将变为可见。

@Override
protected void onCreate() {

    //.........    


    final Runnable r = new Runnable()
    {
        public void run()
        {
            loadMyData();
        }
    };
    Utilities.performOnBackgroundThread(r);    
}

@Override
protected void onResume() {

    new Thread() {
        @Override
        public void run() {
            loadMyData();
        }
    }.start();
    super.onResume();

}

@Override
protected void onStart() {
    if (comesFromOnCreateMethod)
    {
        final Runnable r = new Runnable()
        {
            public void run()
            {
                loadMyData();
            }
        };
        Utilities.performOnBackgroundThread(r);
    }
    comesFromOnCreateMethod = false;
    super.onStart();
}

@Override
protected void onResume() {

    if (comesFromOnCreateMethod)
    {
        final Runnable r = new Runnable()
        {
            public void run()
            {
                loadMyData();
            }
        };
        Utilities.performOnBackgroundThread(r);
    }
    comesFromOnCreateMethod = false;

}

4 个答案:

答案 0 :(得分:4)

如果你得到一个黑屏,那么我会假设你的代码是在UI线程上运行而不是在后台运行,导致UI挂起,直到工作完成。

进行后台工作的最佳解决方案之一是AsyncTask。使用它,你可以在你的onCreate()方法中调用它,当它完成后,它将为你发布一个回调到你可以显示数据的UI线程。

如果希望每次显示此Activity时都运行此方法,则在onResume()中调用它。否则,请在onCreate()中调用它。

答案 1 :(得分:2)

在onCreate中,按照其他人的建议制作异步任务。确保首先为应用程序生成内容,然后调用asyncTasks。您可以通过回调控制您的微调器。

答案 2 :(得分:1)

首先,您可能希望提高接受率,39%相当低。

无论如何,你可能想检查AsyncTask,它应该做的事情。 http://developer.android.com/reference/android/os/AsyncTask.html

通常,您需要在onPreExecute中初始化,在doInBackGround中执行网络连接,并将结果设置为OnPostExecute上的UI线程。希望这会有所帮助。

答案 3 :(得分:1)

使用AssynchTask(),您应首先在各自的生命周期方法中调用super。onResume()或任何生命周期方法,然后再使用其他特定方法....