在长时间运行线程完成之前显示Android布局



我需要在主活动启动时运行长任务,我必须将其放在onCreate()方法而不是onResume()中,因为我只希望它运行一次,而不是每次活动获得焦点(即从对话框关闭)。

问题是布局不显示,直到长时间运行的任务完成,只是离开应用程序显示黑屏。

我想也许在另一个线程中启动它就足够了,但似乎主线程仍然等待这个完成,然后继续布局?

final Thread launcherThread = new Thread(new Runnable() {
     @Override
     public void run() {
          doLongTask();
     }
});
launcherThread.start();

如有任何帮助,我将不胜感激。

如果有帮助,整个onCreate()如下:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inc_menu = (MenuContainer) this.getLayoutInflater().inflate(R.layout.main, null);
        setContentView(inc_menu);
        final Thread launcherThread = new Thread(new Runnable() {
             @Override
             public void run() {
                   doLongTask();
             }
        });
        launcherThread.start();
    }

应该是

launcherThread.start();

否则,Runnable将在调用run方法的线程的上下文中执行。

 inc_menu = (MenuContainer) this.getLayoutInflater().inflate(R.layout.main, null);
 setContentView(inc_menu);

可以在

中修改
 setContentView(R.layout.main);

在这种情况下显然没有理由使用膨胀器。

你错了。当你在同一线程中调用start .run()时,这就是为什么你的界面不绘图。将其替换为Thread.start()。它将启动新线程,UI将不会被阻塞。

在Android编程时更喜欢使用AsyncTask

new AsyncTask<Void,Void,Void>(){
    @Override
    protected Void doInBackground(Void ... params){
        doLongTask();
        return null;
    }
}.execute();

最新更新