我的应用程序需要一段时间才能启动(MainActivity),所以我想要一个单独的线程来显示加载指示器10秒钟(忽略此10秒内的所有其他触摸事件)然后自动消失。我该怎么做呢?
答案 0 :(得分:2)
如果您的主要活动需要几秒钟来初始化,那么初始化应该是在单独的线程上,而不是启动屏幕。您永远不应该通过耗时的操作来阻止UI线程。
您可以按照以下方式组织初始化:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set up the splash screen
setContentView(R.layout.splash_screen);
// set up and start the initialization thread
final Handler handler = new Handler();
new Thread() {
public void run() {
// Do time-consuming initialization.
// When done:
handler.post(new Runnable() {
public void run() {
// set up the real UI
}
});
}
}.start();
}
这将删除启动画面,并在耗时的初始化完成后将其替换为真实的UI。
如果您总是要等待至少10秒,您可以在启动线程之前在本地变量中记录开始时间,然后在初始化完成后,如果还有剩余时间,您可以使用postDelayed
或postAtTime
。
以上代码使用Handler
和Thread
,因为您想要做的事情相当简单。作为替代方案,您可以使用AsyncTask
,这基本上是相同的。它还有内置工具,允许您发布"初始化进程到UI线程。有关详细信息,请参阅文档。
答案 1 :(得分:0)
好处:
不需要处理程序/线程,因为您一直都在主要活动中。
更新进度条将是轻而易举的,因为您一直都在UI线程中。
应用程序不太可能崩溃,因为在加载过程中禁用了触摸事件,因此UI线程没有负担。