Android setContentView()在执行长任务的活动中不显示接口

Android setContentView()在执行长任务的活动中不显示接口,android,android-layout,android-asynctask,android-ui,Android,Android Layout,Android Asynctask,Android Ui,我的应用程序中有两个活动。一个是首次启动应用程序时显示的列表。当用户选择它时,第二个活动将以意图启动。后者从意图中获取信息,并执行一系列冗长的计算(约20秒)。下面是我的第二项活动的样子: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_screen); Intent

我的应用程序中有两个活动。一个是首次启动应用程序时显示的列表。当用户选择它时,第二个活动将以
意图启动。后者从意图中获取信息,并执行一系列冗长的计算(约20秒)。下面是我的第二项活动的样子:

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

    Intent receivedIntent = getIntent();
    Bundle MyBundle = receivedIntent.getExtras();

    String myName = MyBundle.getString("selected");

    /*
     * Code for long operation here
     */

但是,直到活动完成长操作后,才会显示用户界面,我怀疑这是因为它都发生在
onCreate()
(对吗?)。那么我能做些什么来解决这个问题呢?

完全正确!只有在发生
onCreate()
onStart()
之后,才会呈现UI

为了防止这种情况发生,您应该将重物转移到其他线程,最好使用
AsyncTask


安卓开发者的文章《无痛线程》解释了如何做得很好,看一看

谢谢你的回答!但是,如果我想首先呈现接口,我什么时候运行
AsyncTask
?我无法在
onCreate()
onStart()
上运行它,因为这仍然会延迟界面的显示。实际上,它不会延迟界面的显示。它只是在UI线程运行时加载另一个线程。如果您需要使用AsyncTask更新UI,您仍然可以,只要您在任务结束时执行
onPreExecute
,或者在任务结束时执行
onPostExecute
。如果您想先呈现界面,那么不要将代码放入
onCreate()
onStart()
而是将其放在一个按钮中,当用户单击该按钮时,运行您的重载代码。。。