Android线程混乱

JFF*_*FFF 1 java android

我已经编写了一个函数来创建一个启动画面,我的应用程序超时5秒.

代码工作正常,但是当超时达到零并且我想重定向到我的主要活动时,应用程序崩溃并出现以下错误:

Only the original thread that created a view hierarchy can touch its views.
Run Code Online (Sandbox Code Playgroud)

所以我环顾了一下,有人建议在我的功能中嵌套这个.这似乎是一个好主意,但现在像睡眠/停止的方法将无法正常工作.

我的代码在下面,我可以提供更多/详细解释,如果不够清楚,请告诉我.谢谢您的帮助.

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        showSplashScreen();

    }

    protected boolean _active = true;
    protected int _splashTime = 5000;  // Splash screen is 5 seconds

    public void showSplashScreen() {

        setContentView(R.layout.splash_layout);

//      Thread splashThread = new Thread() {

         runOnUiThread(new Runnable() {

             @Override
             public void run() {
                 try {
                     int waited = 0;
                     while (_active && (waited < _splashTime)) {
                         Thread.sleep(100);
                         if (_active) {
                             waited += 100;
                         }
                     }
                 } catch (InterruptedException e) {
                     // do nothing
                 } finally {
                     showApplication();
                 }
             }
         });
    }
Run Code Online (Sandbox Code Playgroud)

Kur*_*aum 7

可能不是你想听到的,但你永远不应该在你的移动应用程序上放置一个闪屏.除了游戏,当人们使用他们想要进入的移动应用程序时,做他们需要做的事情,然后离开.如果你让这个过程需要更长的时间,人们就会对你的应用程序感到沮丧.您可能应该重新考虑不使用启动画面.

  • @JFFF这就是你做的事情:你回到那个设计团队并说"嘿!这是愚蠢的!我们会惹恼我们的用户!我们不会这样做!".然后嘟about一些关于你如何为你的.50口径得到一个新名字的东西,然后冲出房间.他们会认为你已经邮寄了什么东西,并且再也不会质疑你的任何设计变化.你现在可以自由地移除闪屏...偶尔偷走人们的午餐并逃脱它. (5认同)