Android 活动可见后,如何运行代码?

Android 活动可见后,如何运行代码?,android,android-activity,visible,loaded,Android,Android Activity,Visible,Loaded,我有一个有3个旋转器的活动。这些微调器通过一种大约需要1分钟才能完成的方法从web服务获取数据 我想先加载活动,在活动可见后,调用该web服务方法并加载数据。我已经分别测试了以下代码,但没有一个解决了我的问题。在这些示例中,应用程序将进入黑屏,当web服务操作完成时,它将变得可见 @Override protected void onCreate() { //......... final Runnable r = new Runnable() {

我有一个有3个旋转器的活动。这些微调器通过一种大约需要1分钟才能完成的方法从web服务获取数据

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

@Override
protected void onCreate() {

    //.........    


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




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

做背景工作的最佳解决方案之一是。使用此方法,您可以在onCreate()方法中调用它,完成后,它将为您向UI线程发出回调,您可以在其中显示数据


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

首先,您可能需要提高接受率,39%的接受率非常低

无论如何,您可能希望检查AsyncTask,它应该可以完成这项任务


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

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

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

我提到的代码是线程。为什么我的代码不起作用但AsyncTask起作用?:-??您的代码中一定有东西泄漏到UI线程并导致其挂起。
@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;

}