【问题标题】:Display an Activity while waiting for results to come back when using AsyncTask使用 AsyncTask 时在等待结果返回时显示 Activity
【发布时间】:2023-03-14 04:54:01
【问题描述】:

我希望在从网络下载一些信息时显示一个活动。 信息下载完成后,我想显示另一个活动。

这是我的代码:

public class SplashScreenActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_screen_layout);

    load();
}

private void load() {
    try {
        ArrayList data= new LoadPage().execute().get();
        if(data!= null) {
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

很简单,但我遇到的问题是这个 Activity 没有显示在屏幕(UI)上。发生的情况是信息被下载并且 MainActivity 已按预期启动,但此 Activity (SplashScreenActivity) 从未向用户显示。

进入 MainActivity 后,如果我按下“返回”按钮,我可以看到 SplashScreenActivity。

我怀疑这与 UI 线程有关,并且我在 new LoadPage().execute().get(); 调用 get 方法并等待结果。

我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: android android-layout android-asynctask


    【解决方案1】:

    您没有正确使用 ASyncTask。在 ASyncTask 上调用 get 方法将阻塞您的 UI 线程。 ASyncTask 包含一个 onPostExecute 方法,这是启动 Activity 的正确位置

    【讨论】:

      【解决方案2】:

      我们以不同的方式实现了这一点,并且效果很好。初始屏幕是一个视图,而不是位于 viewflipper 第一个位置的活动。加载完成后,启动画面会以动画形式消失。

      【讨论】:

        【解决方案3】:

        尝试在您的SplashScreenActivity 中使用onPostExecute 方法。

        一旦后台的AsyncTask 控制转移到onPostExecute 方法,您可以编写代码以根据您的结果调用下一个活动。

        类似这样的:

           protected void onPostExecute(ArrayList data)
              {
                if(data!= null) 
                {
                 Intent showContent = new Intent(getApplicationContext(),MainActivity.class);
                 startActivity(showContent);
        
                }
              }
        

        【讨论】:

          猜你喜欢
          • 2017-06-09
          • 1970-01-01
          • 2019-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-02
          • 2019-06-22
          相关资源
          最近更新 更多