我需要在主活动启动时运行长任务,我必须将其放在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();