在开始另一个活动之前使用Thread.sleep(毫秒)等待一段时间是不是很糟糕?

Fil*_*zzi 3 java android thread-sleep

我正在为应用程序制作SplashScreen ...当应用程序启动时,它启动LoadingActivity ...睡眠3秒,完成(); 然后启动MainActivity.Splash用于更新数据库.如果数据库已经更新,我仍然希望启动仍然持续3秒.

我使用以下代码:

protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        Intent intent = new Intent(LoadingActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个糟糕的实践吗?为什么?该应用程序正在AVD中运行.

Gri*_*ace 6

睡在UI线程上总是一个坏主意.在这种情况下,您位于onPostExecuteUI线程中.

把你的睡眠转移到你的doInBackground方法,你AsyncTask不会得到任何ANR(Android没有响应).

用户不喜欢等待启动画面,所以最好不要等待.但有时需要启动画面(即由于合同).

  • 然后告诉他们你在做什么,只要你需要为了完成它就留在那里. (3认同)

M-W*_*eEh 5

是的,这是不好的做法,onPostExecute()在UI线程上调用,所以基本上你是阻止你的UI线程3整秒.我怀疑你想要一个闪屏.你可以这样做.

new Handler().postDelayed(new Runnable(){
    @Override
    public void run(){
        Intent intent = new Intent(LoadingActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
     }
},3000);
Run Code Online (Sandbox Code Playgroud)

或者,如果你想坚持AsyncTask然后覆盖doInBackground()在它睡觉,并启动您ActivityonPostExecute()正常进行.